android制作圆角图片和图片倒影

缺乏、安全感 2022-01-15 04:15 386阅读 0赞

我只是把代码下了,忘了在呢看到了,对不住作者了

主要包含了 放大缩小 圆角图片 和 倒影

Java代码 收藏代码

  1. package com.lp.imageUI;
  2. import android.graphics.Bitmap;
  3. import android.graphics.Canvas;
  4. import android.graphics.LinearGradient;
  5. import android.graphics.Matrix;
  6. import android.graphics.Paint;
  7. import android.graphics.PixelFormat;
  8. import android.graphics.PorterDuffXfermode;
  9. import android.graphics.Rect;
  10. import android.graphics.RectF;
  11. import android.graphics.Bitmap.Config;
  12. import android.graphics.PorterDuff.Mode;
  13. import android.graphics.Shader.TileMode;
  14. import android.graphics.drawable.Drawable;
  15. public class ImageUtil {
  16. //放大缩小图片
  17. public static Bitmap zoomBitmap(Bitmap bitmap,int w,int h){
  18. int width = bitmap.getWidth();
  19. int height = bitmap.getHeight();
  20. Matrix matrix = new Matrix();
  21. float scaleWidht = ((float)w / width);
  22. float scaleHeight = ((float)h / height);
  23. matrix.postScale(scaleWidht, scaleHeight);
  24. Bitmap newbmp = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);
  25. return newbmp;
  26. }
  27. //将Drawable转化为Bitmap
  28. public static Bitmap drawableToBitmap(Drawable drawable){
  29. int width = drawable.getIntrinsicWidth();
  30. int height = drawable.getIntrinsicHeight();
  31. Bitmap bitmap = Bitmap.createBitmap(width, height,
  32. drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
  33. : Bitmap.Config.RGB_565);
  34. Canvas canvas = new Canvas(bitmap);
  35. drawable.setBounds(0,0,width,height);
  36. drawable.draw(canvas);
  37. return bitmap;
  38. }
  39. //获得圆角图片的方法
  40. public static Bitmap getRoundedCornerBitmap(Bitmap bitmap,float roundPx){
  41. Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap
  42. .getHeight(), Config.ARGB_8888);
  43. Canvas canvas = new Canvas(output);
  44. final int color = 0xff424242;
  45. final Paint paint = new Paint();
  46. final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
  47. final RectF rectF = new RectF(rect);
  48. paint.setAntiAlias(true);
  49. canvas.drawARGB(0, 0, 0, 0);
  50. paint.setColor(color);
  51. /**
  52. * 画一个圆角矩形
  53. * rectF: 矩形
  54. * roundPx 圆角在x轴上或y轴上的半径
  55. */
  56. canvas.drawRoundRect(rectF, roundPx, roundPx+10, paint);
  57. //设置两张图片相交时的模式
  58. //setXfermode前的是 dst 之后的是src
  59. //在正常的情况下,在已有的图像上绘图将会在其上面添加一层新的形状。
  60. //如果新的Paint是完全不透明的,那么它将完全遮挡住下面的Paint;
  61. //PorterDuffXfermode就可以来解决这个问题
  62. //canvas原有的图片 可以理解为背景 就是dst
  63. //新画上去的图片 可以理解为前景 就是src
  64. // paint.setXfermode(new PorterDuffXfermode(Mode.SRC_OUT));
  65. paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
  66. canvas.drawBitmap(bitmap, rect, rect, paint);
  67. return output;
  68. }
  69. //获得带倒影的图片方法
  70. public static Bitmap createReflectionImageWithOrigin(Bitmap bitmap){
  71. // 图片与倒影间隔距离
  72. final int reflectionGap = 4;
  73. // 图片的宽度
  74. int width = bitmap.getWidth();
  75. // 图片的高度
  76. int height = bitmap.getHeight();
  77. Matrix matrix = new Matrix();
  78. // 图片缩放,x轴变为原来的1倍,y轴为-1倍,实现图片的反转
  79. matrix.preScale(1, -1);
  80. // 创建反转后的图片Bitmap对象,图片高是原图的一半。
  81. Bitmap reflectionImage = Bitmap.createBitmap(bitmap,
  82. 0, height/2, width, height/2, matrix, false);
  83. // 创建标准的Bitmap对象,宽和原图一致,高是原图的1.5倍。 可以理解为这张图将会在屏幕上显示 是原图和倒影的合体
  84. Bitmap bitmapWithReflection = Bitmap.createBitmap(width, (height + height/2), Config.ARGB_8888);
  85. // 构造函数传入Bitmap对象,为了在图片上画图
  86. Canvas canvas = new Canvas(bitmapWithReflection);
  87. // 画原始图片
  88. canvas.drawBitmap(bitmap, 0, 0, null);
  89. // 画间隔矩形
  90. Paint deafalutPaint = new Paint();
  91. canvas.drawRect(0, height,width,height + reflectionGap,
  92. deafalutPaint);
  93. // 画倒影图片
  94. canvas.drawBitmap(reflectionImage, 0, height + reflectionGap, null);
  95. // 实现倒影渐变效果
  96. Paint paint = new Paint();
  97. LinearGradient shader = new LinearGradient(0,
  98. bitmap.getHeight(), 0, bitmapWithReflection.getHeight()
    • reflectionGap, 0x70ffffff, 0x00ffffff, TileMode.CLAMP);
  99. paint.setShader(shader);
  100. // Set the Transfer mode to be porter duff and destination in
  101. // 覆盖效果
  102. paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));
  103. // Draw a rectangle using the paint with our linear gradient
  104. canvas.drawRect(0, height, width, bitmapWithReflection.getHeight()
    • reflectionGap, paint);
  105. return bitmapWithReflection;
  106. }
  107. }

http://lipeng88213.iteye.com/blog/1201993

发表评论

表情:
评论列表 (有 0 条评论,386人围观)

还没有评论,来说两句吧...

相关阅读