Android中图像特效处理实例教程

移动开发 Android
Android中有很多图片特效处理技巧,比如圆角、倒影,今天为大家分享一个实例,教程里共有缩放、圆角、倒影等几种特效。

Android中有很多图片特效处理技巧,比如圆角、倒影,今天为大家分享一个实例,本例主要是先获取壁纸(getWallpaper()),然后对当前壁纸的一些特效处理。

第一步:新建一个Android工程命名为ImageDemo,工程结构如下:

第二步:新建一个.java文件,命名为ImageUtil.java,在里面定义一些图片处理方法,代码如下:

  1. package com.android.tutor;  
  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. //放大缩小图片  
  18. public static Bitmap zoomBitmap(Bitmap bitmap,int w,int h){  
  19. int width = bitmap.getWidth();  
  20. int height = bitmap.getHeight();  
  21. Matrix matrix = new Matrix();  
  22. float scaleWidht = ((float)w / width);  
  23. float scaleHeight = ((float)h / height);  
  24. matrix.postScale(scaleWidht, scaleHeight);  
  25. Bitmap newbmp = Bitmap.createBitmap(bitmap, 00, width, height, matrix, true);  
  26. return newbmp;  
  27. }  
  28. //将Drawable转化为Bitmap  
  29. public static Bitmap drawableToBitmap(Drawable drawable){  
  30. int width = drawable.getIntrinsicWidth();  
  31. int height = drawable.getIntrinsicHeight();  
  32. Bitmap bitmap = Bitmap.createBitmap(width, height,  
  33. drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888  
  34. : Bitmap.Config.RGB_565);  
  35. Canvas canvas = new Canvas(bitmap);  
  36. drawable.setBounds(0,0,width,height);  
  37. drawable.draw(canvas);  
  38. return bitmap; 
  39.  
  40.  
  41. //获得圆角图片的方法  
  42. public static Bitmap getRoundedCornerBitmap(Bitmap bitmap,float roundPx){ 
  43.  
  44. Bitmapoutput = Bitmap.createBitmap(bitmap.getWidth(), bitmap  
  45. .getHeight(), Config.ARGB_8888);  
  46. Canvas canvas = new Canvas(output); 
  47.  
  48. final intcolor = 0xff424242;  
  49. final Paint paint = new Paint();  
  50. final Rect rect = new Rect(00, bitmap.getWidth(), bitmap.getHeight());  
  51. final RectF rectF = new RectF(rect); 
  52.  
  53. paint.setAntiAlias(true);  
  54. canvas.drawARGB(0000);  
  55. paint.setColor(color);  
  56. canvas.drawRoundRect(rectF, roundPx, roundPx, paint); 
  57.  
  58. paint.setXfermode(newPorterDuffXfermode(Mode.SRC_IN));  
  59. canvas.drawBitmap(bitmap, rect, rect, paint); 
  60.  
  61. returnoutput;  
  62. }  
  63. //获得带倒影的图片方法  
  64. public static Bitmap createReflectionImageWithOrigin(Bitmap bitmap){  
  65. final int reflectionGap = 4;  
  66. int width = bitmap.getWidth();  
  67. int height = bitmap.getHeight(); 
  68.  
  69. Matrixmatrix = new Matrix();  
  70. matrix.preScale(1, -1); 
  71.  
  72. BitmapreflectionImage = Bitmap.createBitmap(bitmap,  
  73. 0, height/2, width, height/2, matrix, false); 
  74.  
  75. BitmapbitmapWithReflection = Bitmap.createBitmap(width, (height + height/2),Config.ARGB_8888); 
  76.  
  77. Canvascanvas = new Canvas(bitmapWithReflection);  
  78. canvas.drawBitmap(bitmap, 00null);  
  79. Paint deafalutPaint = new Paint();  
  80. canvas.drawRect(0, height,width,height + reflectionGap,  
  81. deafalutPaint); 
  82.  
  83. canvas.drawBitmap(reflectionImage,0, height + reflectionGap, null); 
  84.  
  85. Paint paint= new Paint();  
  86. LinearGradient shader = new LinearGradient(0,  
  87. bitmap.getHeight(), 0, bitmapWithReflection.getHeight()  
  88. + reflectionGap, 0x70ffffff0x00ffffff, TileMode.CLAMP);  
  89. paint.setShader(shader);  
  90. // Set the Transfer mode to be porter duff and destination in  
  91. paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));  
  92. // Draw a rectangle using the paint with our linear gradient  
  93. canvas.drawRect(0, height, width, bitmapWithReflection.getHeight()  
  94. + reflectionGap, paint); 
  95.  
  96. returnbitmapWithReflection;  
  97.  
  98. }  

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

  1. <?xmlversionxmlversion="1.0" encoding="utf-8"?>  
  2. <LinearLayoutxmlns:androidLinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"  
  3. android:orientation="vertical"  
  4. android:layout_width="fill_parent"  
  5. android:layout_height="fill_parent"  
  6. >  
  7. <ImageView  
  8. android:id="@+id/image01"  
  9. android:layout_width="wrap_content"  
  10. android:layout_height="wrap_content"  
  11. android:padding="10px"  
  12. />  
  13. <ImageView  
  14. android:id="@+id/image02"  
  15. android:layout_width="wrap_content"  
  16. android:layout_height="wrap_content"  
  17. android:padding="10px"  
  18. />  
  19. </LinearLayout>  

第四步:修改主核心程序,ImageDemo.java,代码如下:

  1. package com.android.tutor;  
  2. import android.app.Activity;  
  3. import android.graphics.Bitmap;  
  4. import android.graphics.drawable.Drawable;  
  5. import android.os.Bundle;  
  6. import android.widget.ImageView;  
  7. public class Imagedemo extends Activity {  
  8. private ImageView mImageView01,mImageView02; 
  9.  
  10. public voidonCreate(Bundle savedInstanceState) {  
  11. super.onCreate(savedInstanceState);  
  12. setContentView(R.layout.main);  
  13. setupViews();  
  14.  
  15. private voidsetupViews(){  
  16. mImageView01 = (ImageView)findViewById(R.id.image01);  
  17. mImageView02 = (ImageView)findViewById(R.id.image02); 
  18.  
  19. //获取壁纸返回值是Drawable  
  20. Drawable drawable = getWallpaper();  
  21. //将Drawable转化为Bitmap  
  22. Bitmap bitmap = ImageUtil.drawableToBitmap(drawable);  
  23. //缩放图片  
  24. Bitmap zoomBitmap = ImageUtil.zoomBitmap(bitmap, 100100);  
  25. //获取圆角图片  
  26. Bitmap roundBitmap = ImageUtil.getRoundedCornerBitmap(zoomBitmap, 10.0f);  
  27. //获取倒影图片  
  28. Bitmap reflectBitmap = ImageUtil.createReflectionImageWithOrigin(zoomBitmap);  
  29. //这里可以让Bitmap再转化为Drawable  
  30. // Drawable roundDrawable = new BitmapDrawable(roundBitmap);  
  31. // Drawable reflectDrawable = new BitmapDrawable(reflectBitmap);  
  32. // mImageView01.setBackgroundDrawable(roundDrawable);  
  33. // mImageView02.setBackgroundDrawable(reflectDrawable); 
  34.  
  35. mImageView01.setImageBitmap(roundBitmap);  
  36. mImageView02.setImageBitmap(reflectBitmap);  
  37.  
  38.  
  39. }  

第五步:运行上述工程,查看效果如下:

责任编辑:徐川 来源: OSChina
相关推荐

2013-04-22 13:57:15

Android图像特效

2014-08-26 11:46:46

QtAndroid实例教程

2009-09-18 11:44:05

Scala实例教程Kestrel

2016-11-09 20:41:47

PHP图片切片图片压缩

2019-06-17 15:25:17

expandunexpandLinux

2010-08-17 11:02:45

DIV CSS实例教程

2011-07-21 17:00:59

iPhone UIWebView Status Cod

2009-09-08 14:18:35

NFS服务器

2011-07-25 16:03:47

XCode 编译

2010-08-25 17:08:18

实例教程

2009-07-30 14:18:02

ASP.NET实例教程

2013-01-14 17:05:55

UCUI设计菜单栏

2013-08-15 09:14:55

2013-07-25 14:44:48

sqlite实例教程iOS开发学习sqlite打造词典

2010-06-18 15:55:47

UML建模

2011-07-27 17:41:35

Objective-C Xcode

2010-06-29 16:53:48

UML实例教程

2009-11-02 09:14:51

ASP.NET MVC

2010-08-17 10:48:12

Div CSS实例

2010-07-26 15:12:20

坐标变换
点赞
收藏

51CTO技术栈公众号