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

Java代码 收藏代码
  1. packagecom.lp.imageUI;
  2. importandroid.graphics.Bitmap;
  3. importandroid.graphics.Canvas;
  4. importandroid.graphics.LinearGradient;
  5. importandroid.graphics.Matrix;
  6. importandroid.graphics.Paint;
  7. importandroid.graphics.PixelFormat;
  8. importandroid.graphics.PorterDuffXfermode;
  9. importandroid.graphics.Rect;
  10. importandroid.graphics.RectF;
  11. importandroid.graphics.Bitmap.Config;
  12. importandroid.graphics.PorterDuff.Mode;
  13. importandroid.graphics.Shader.TileMode;
  14. importandroid.graphics.drawable.Drawable;
  15. publicclassImageUtil{
  16. //放大缩小图片
  17. publicstaticBitmapzoomBitmap(Bitmapbitmap,intw,inth){
  18. intwidth=bitmap.getWidth();
  19. intheight=bitmap.getHeight();
  20. Matrixmatrix=newMatrix();
  21. floatscaleWidht=((float)w/width);
  22. floatscaleHeight=((float)h/height);
  23. matrix.postScale(scaleWidht,scaleHeight);
  24. Bitmapnewbmp=Bitmap.createBitmap(bitmap,0,0,width,height,matrix,true);
  25. returnnewbmp;
  26. }
  27. //将Drawable转化为Bitmap
  28. publicstaticBitmapdrawableToBitmap(Drawabledrawable){
  29. intwidth=drawable.getIntrinsicWidth();
  30. intheight=drawable.getIntrinsicHeight();
  31. Bitmapbitmap=Bitmap.createBitmap(width,height,
  32. drawable.getOpacity()!=PixelFormat.OPAQUE?Bitmap.Config.ARGB_8888
  33. :Bitmap.Config.RGB_565);
  34. Canvascanvas=newCanvas(bitmap);
  35. drawable.setBounds(0,0,width,height);
  36. drawable.draw(canvas);
  37. returnbitmap;
  38. }
  39. //获得圆角图片的方法
  40. publicstaticBitmapgetRoundedCornerBitmap(Bitmapbitmap,floatroundPx){
  41. Bitmapoutput=Bitmap.createBitmap(bitmap.getWidth(),bitmap
  42. .getHeight(),Config.ARGB_8888);
  43. Canvascanvas=newCanvas(output);
  44. finalintcolor=0xff424242;
  45. finalPaintpaint=newPaint();
  46. finalRectrect=newRect(0,0,bitmap.getWidth(),bitmap.getHeight());
  47. finalRectFrectF=newRectF(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(newPorterDuffXfermode(Mode.SRC_OUT));
  65. paint.setXfermode(newPorterDuffXfermode(Mode.SRC_IN));
  66. canvas.drawBitmap(bitmap,rect,rect,paint);
  67. returnoutput;
  68. }
  69. //获得带倒影的图片方法
  70. publicstaticBitmapcreateReflectionImageWithOrigin(Bitmapbitmap){
  71. //图片与倒影间隔距离
  72. finalintreflectionGap=4;
  73. //图片的宽度
  74. intwidth=bitmap.getWidth();
  75. //图片的高度
  76. intheight=bitmap.getHeight();
  77. Matrixmatrix=newMatrix();
  78. //图片缩放,x轴变为原来的1倍,y轴为-1倍,实现图片的反转
  79. matrix.preScale(1,-1);
  80. //创建反转后的图片Bitmap对象,图片高是原图的一半。
  81. BitmapreflectionImage=Bitmap.createBitmap(bitmap,
  82. 0,height/2,width,height/2,matrix,false);
  83. //创建标准的Bitmap对象,宽和原图一致,高是原图的1.5倍。可以理解为这张图将会在屏幕上显示是原图和倒影的合体
  84. BitmapbitmapWithReflection=Bitmap.createBitmap(width,(height+height/2),Config.ARGB_8888);
  85. //构造函数传入Bitmap对象,为了在图片上画图
  86. Canvascanvas=newCanvas(bitmapWithReflection);
  87. //画原始图片
  88. canvas.drawBitmap(bitmap,0,0,null);
  89. //画间隔矩形
  90. PaintdeafalutPaint=newPaint();
  91. canvas.drawRect(0,height,width,height+reflectionGap,
  92. deafalutPaint);
  93. //画倒影图片
  94. canvas.drawBitmap(reflectionImage,0,height+reflectionGap,null);
  95. //实现倒影渐变效果
  96. Paintpaint=newPaint();
  97. LinearGradientshader=newLinearGradient(0,
  98. bitmap.getHeight(),0,bitmapWithReflection.getHeight()
  99. +reflectionGap,0x70ffffff,0x00ffffff,TileMode.CLAMP);
  100. paint.setShader(shader);
  101. //SettheTransfermodetobeporterduffanddestinationin
  102. //覆盖效果
  103. paint.setXfermode(newPorterDuffXfermode(Mode.DST_IN));
  104. //Drawarectangleusingthepaintwithourlineargradient
  105. canvas.drawRect(0,height,width,bitmapWithReflection.getHeight()
  106. +reflectionGap,paint);
  107. returnbitmapWithReflection;
  108. }
  109. }



圆角和倒影的效果如图:

Android平台上实现图片的缩放,圆角,倒影效果
<!--EndFragment-->

更多相关文章

  1. android读取图片
  2. Android 使用Glide实现圆形和圆角图片
  3. 2012-7-20 android 图片叠加效果——两种方法
  4. Android文件图片上传的详细讲解(四)---服务端编码
  5. android处理大图片内存溢出的简单办法
  6. android:ImageView选择本地图片并显示
  7. android获取图片和视频的缩略图

随机推荐

  1. Android AIDL创建Service
  2. 国外著名 Android(安卓)开发者的信息
  3. Android常用adb命令总结(二)
  4. Android NDK R9环境配置,开发教程
  5. Android调用摄像头识别图片的形状和颜色
  6. Android(安卓)解决getColor()或getDrawab
  7. Android(安卓)Looper(cpp)用法举例
  8. Android CoordinatorLayout + AppBarLayo
  9. android中的左右滑动
  10. android 界面更新之runOnUiThread()