From:http://blog.csdn.net/mldxs/article/details/9179515

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

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. }

更多相关文章

  1. android传递图片和图片与byte转换
  2. android调用系统摄像头拍照图片和视频
  3. android数据库中存取图片
  4. 【TabHost】Android设置TabHost文字及图片
  5. 图片url地址转换成file文件
  6. android下载网络图片并缓存
  7. Android 通过Matrix来对图片进行缩放,旋转和平移
  8. android实现图片上传功能(springMvc)

随机推荐

  1. 创建简单的Android Material DesignDemo
  2. [置顶] Android-->Rxjava与Retrofit2的结
  3. android 图片转 圆形和圆角矩形
  4. Cocos2d-x项目编译为Android应用——命令
  5. picasso-强大的Android图片下载缓存库
  6. 关于Android 横竖屏切换的问题
  7. Android IMF 分析
  8. Android 蓝牙浅析
  9. Android SDK的安装与环境变量配置
  10. appium 并发测试