首页 > 开发 > Java > 正文

Android中几种图片特效的处理的实现方法

2024-07-13 10:10:36
字体:
来源:转载
供稿:网友

 Android中几种图片特效的处理

这里有放大缩小图片,获得圆角图片,获得带倒影图片的几种方法及实现代码,

package com.android.tutor; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.LinearGradient; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.PixelFormat; import android.graphics.PorterDuffXfermode; import android.graphics.Rect; import android.graphics.RectF; import android.graphics.Bitmap.Config; import android.graphics.PorterDuff.Mode; import android.graphics.Shader.TileMode; import android.graphics.drawable.Drawable; public class ImageUtil {      //放大缩小图片   public static Bitmap zoomBitmap(Bitmap bitmap,int w,int h){     int width = bitmap.getWidth();     int height = bitmap.getHeight();     Matrix matrix = new Matrix();     float scaleWidht = ((float)w / width);     float scaleHeight = ((float)h / height);     matrix.postScale(scaleWidht, scaleHeight);     Bitmap newbmp = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);     return newbmp;   }   //将Drawable转化为Bitmap    public static Bitmap drawableToBitmap(Drawable drawable){       int width = drawable.getIntrinsicWidth();       int height = drawable.getIntrinsicHeight();       Bitmap bitmap = Bitmap.createBitmap(width, height,           drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888               : Bitmap.Config.RGB_565);       Canvas canvas = new Canvas(bitmap);       drawable.setBounds(0,0,width,height);       drawable.draw(canvas);       return bitmap;            }        //获得圆角图片的方法   public static Bitmap getRoundedCornerBitmap(Bitmap bitmap,float roundPx){          Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap         .getHeight(), Config.ARGB_8888);     Canvas canvas = new Canvas(output);       final int color = 0xff424242;     final Paint paint = new Paint();     final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());     final RectF rectF = new RectF(rect);       paint.setAntiAlias(true);     canvas.drawARGB(0, 0, 0, 0);     paint.setColor(color);     canvas.drawRoundRect(rectF, roundPx, roundPx, paint);       paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));     canvas.drawBitmap(bitmap, rect, rect, paint);       return output;   }   //获得带倒影的图片方法   public static Bitmap createReflectionImageWithOrigin(Bitmap bitmap){     final int reflectionGap = 4;     int width = bitmap.getWidth();     int height = bitmap.getHeight();          Matrix matrix = new Matrix();     matrix.preScale(1, -1);          Bitmap reflectionImage = Bitmap.createBitmap(bitmap,          0, height/2, width, height/2, matrix, false);          Bitmap bitmapWithReflection = Bitmap.createBitmap(width, (height + height/2), Config.ARGB_8888);          Canvas canvas = new Canvas(bitmapWithReflection);     canvas.drawBitmap(bitmap, 0, 0, null);     Paint deafalutPaint = new Paint();     canvas.drawRect(0, height,width,height + reflectionGap,         deafalutPaint);          canvas.drawBitmap(reflectionImage, 0, height + reflectionGap, null);          Paint paint = new Paint();     LinearGradient shader = new LinearGradient(0,         bitmap.getHeight(), 0, bitmapWithReflection.getHeight()         + reflectionGap, 0x70ffffff, 0x00ffffff, TileMode.CLAMP);     paint.setShader(shader);     // Set the Transfer mode to be porter duff and destination in     paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));     // Draw a rectangle using the paint with our linear gradient     canvas.drawRect(0, height, width, bitmapWithReflection.getHeight()         + reflectionGap, paint);       return bitmapWithReflection;   }    } 

修改main.xml布局文件,主要放了两个ImageView控件,代码如下:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"   android:orientation="vertical"   android:layout_width="fill_parent"   android:layout_height="fill_parent"   >   <ImageView      android:id="@+id/image01"      android:layout_width="wrap_content"      android:layout_height="wrap_content"      android:padding="10px"     />   <ImageView     android:id="@+id/image02"     android:layout_width="wrap_content"      android:layout_height="wrap_content"      android:padding="10px"   /> </LinearLayout> 

修改主核心程序,ImageDemo.Java,代码如下:

package com.android.tutor; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.widget.ImageView; public class Imagedemo extends Activity {   private ImageView mImageView01,mImageView02;      public void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.main);     setupViews();   }      private void setupViews(){     mImageView01 = (ImageView)findViewById(R.id.image01);     mImageView02 = (ImageView)findViewById(R.id.image02);          //获取壁纸返回值是Drawable     Drawable drawable = getWallpaper();     //将Drawable转化为Bitmap     Bitmap bitmap = ImageUtil.drawableToBitmap(drawable);     //缩放图片     Bitmap zoomBitmap = ImageUtil.zoomBitmap(bitmap, 100, 100);     //获取圆角图片     Bitmap roundBitmap = ImageUtil.getRoundedCornerBitmap(zoomBitmap, 10.0f);     //获取倒影图片     Bitmap reflectBitmap = ImageUtil.createReflectionImageWithOrigin(zoomBitmap);     //这里可以让Bitmap再转化为Drawable //   Drawable roundDrawable = new BitmapDrawable(roundBitmap);     //   Drawable reflectDrawable = new BitmapDrawable(reflectBitmap);     //   mImageView01.setBackgroundDrawable(roundDrawable); //   mImageView02.setBackgroundDrawable(reflectDrawable);              mImageView01.setImageBitmap(roundBitmap);     mImageView02.setImageBitmap(reflectBitmap);   }          } 

以上就是Android中几种图片特效的方法整理,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


注:相关教程知识阅读请移步到JAVA教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表