大家好,这一节给大家分享的是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大功告成了!!