Android 实现图片的圆角,倒影,转换

来源:互联网 发布:烧脑电影 知乎 编辑:程序博客网 时间:2024/04/29 16:54
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;     }  }