大家好,这一节给大家分享的是Android中几种图像特效处理的小技巧,比如圆角,倒影,还有就是图片缩放,Drawable转化为Bitmap,Bitmap转化为Drawable等等.

废话少说了,直接讲解今天的实例,本例主要是先获取壁纸(getWallpaper()),然后对当前壁纸的一些特效处理.大家按步骤一步一步来:

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


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


[java]  
   view plain 
   copy 
   
 
   
 
   
 
   
 
 
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. new Matrix();  
22. float scaleWidht = ((float)w / width);  
23. float scaleHeight = ((float)h / height);  
24.         matrix.postScale(scaleWidht, scaleHeight);  
25. 0, 0, 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. new Canvas(bitmap);  
36. 0,0,width,height);  
37.             drawable.draw(canvas);  
38. return bitmap;  
39.               
40.         }  
41.        
42. //获得圆角图片的方法  
43. public static Bitmap getRoundedCornerBitmap(Bitmap bitmap,float roundPx){  
44.           
45.         Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap  
46.                 .getHeight(), Config.ARGB_8888);  
47. new Canvas(output);  
48.    
49. final int color = 0xff424242;  
50. final Paint paint = new Paint();  
51. final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());  
52. final RectF rectF = new RectF(rect);  
53.    
54. true);  
55. 0, 0, 0, 0);  
56.         paint.setColor(color);  
57.         canvas.drawRoundRect(rectF, roundPx, roundPx, paint);  
58.    
59. new PorterDuffXfermode(Mode.SRC_IN));  
60.         canvas.drawBitmap(bitmap, rect, rect, paint);  
61.    
62. return output;  
63.     }  
64. //获得带倒影的图片方法  
65. public static Bitmap createReflectionImageWithOrigin(Bitmap bitmap){  
66. final int reflectionGap = 4;  
67. int width = bitmap.getWidth();  
68. int height = bitmap.getHeight();  
69.           
70. new Matrix();  
71. 1, -1);  
72.           
73.         Bitmap reflectionImage = Bitmap.createBitmap(bitmap,   
74. 0, height/2, width, height/2, matrix, false);  
75.           
76. 2), Config.ARGB_8888);  
77.           
78. new Canvas(bitmapWithReflection);  
79. 0, 0, null);  
80. new Paint();  
81. 0, height,width,height + reflectionGap,  
82.                 deafalutPaint);  
83.           
84. 0, height + reflectionGap, null);  
85.           
86. new Paint();  
87. new LinearGradient(0,  
88. 0, bitmapWithReflection.getHeight()  
89. 0x70ffffff, 0x00ffffff, TileMode.CLAMP);  
90.         paint.setShader(shader);  
91. // Set the Transfer mode to be porter duff and destination in  
92. new PorterDuffXfermode(Mode.DST_IN));  
93. // Draw a rectangle using the paint with our linear gradient  
94. 0, height, width, bitmapWithReflection.getHeight()  
95.                 + reflectionGap, paint);  
96.    
97. return bitmapWithReflection;  
98.     }  
99.       
100. }


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


[java]  
   view plain 
   copy 
   
 
   
 
   
 
   
 
 
1. <?xml version="1.0" encoding="utf-8"?>  
2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
3. "vertical"  
4. "fill_parent"  
5. "fill_parent"  
6.     >  
7.     <ImageView   
8. "@+id/image01"   
9. "wrap_content"   
10. "wrap_content"   
11. "10px"  
12.         />  
13.     <ImageView  
14. "@+id/image02"  
15. "wrap_content"   
16. "wrap_content"   
17. "10px"  
18.     />  
19. </LinearLayout>


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


[java]  
   view plain 
   copy 
   
 
   
 
   
 
   
 
 
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 void onCreate(Bundle savedInstanceState) {  
11. super.onCreate(savedInstanceState);  
12.         setContentView(R.layout.main);  
13.         setupViews();  
14.     }  
15.      
16. private void setupViews(){  
17.         mImageView01 = (ImageView)findViewById(R.id.image01);  
18.         mImageView02 = (ImageView)findViewById(R.id.image02);  
19.           
20. //获取壁纸返回值是Drawable  
21.         Drawable drawable = getWallpaper();  
22. //将Drawable转化为Bitmap  
23.         Bitmap bitmap = ImageUtil.drawableToBitmap(drawable);  
24. //缩放图片  
25. 100, 100);  
26. //获取圆角图片  
27. 10.0f);  
28. //获取倒影图片  
29.         Bitmap reflectBitmap = ImageUtil.createReflectionImageWithOrigin(zoomBitmap);  
30. //这里可以让Bitmap再转化为Drawable  
31. //      Drawable roundDrawable = new BitmapDrawable(roundBitmap);         
32. //      Drawable reflectDrawable = new BitmapDrawable(reflectBitmap);         
33. //      mImageView01.setBackgroundDrawable(roundDrawable);  
34. //      mImageView02.setBackgroundDrawable(reflectDrawable);  
35.                   
36.         mImageView01.setImageBitmap(roundBitmap);  
37.         mImageView02.setImageBitmap(reflectBitmap);  
38.     }  
39.         
40.          
41. }


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


 

OK大功告成了!!