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

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

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

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

[java] view plain copy
  1. packagecom.android.tutor;
  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. canvas.drawRoundRect(rectF,roundPx,roundPx,paint);
  52. paint.setXfermode(newPorterDuffXfermode(Mode.SRC_IN));
  53. canvas.drawBitmap(bitmap,rect,rect,paint);
  54. returnoutput;
  55. }
  56. //获得带倒影的图片方法
  57. publicstaticBitmapcreateReflectionImageWithOrigin(Bitmapbitmap){
  58. finalintreflectionGap=4;
  59. intwidth=bitmap.getWidth();
  60. intheight=bitmap.getHeight();
  61. Matrixmatrix=newMatrix();
  62. matrix.preScale(1,-1);
  63. BitmapreflectionImage=Bitmap.createBitmap(bitmap,
  64. 0,height/2,width,height/2,matrix,false);
  65. BitmapbitmapWithReflection=Bitmap.createBitmap(width,(height+height/2),Config.ARGB_8888);
  66. Canvascanvas=newCanvas(bitmapWithReflection);
  67. canvas.drawBitmap(bitmap,0,0,null);
  68. PaintdeafalutPaint=newPaint();
  69. canvas.drawRect(0,height,width,height+reflectionGap,
  70. deafalutPaint);
  71. canvas.drawBitmap(reflectionImage,0,height+reflectionGap,null);
  72. Paintpaint=newPaint();
  73. LinearGradientshader=newLinearGradient(0,
  74. bitmap.getHeight(),0,bitmapWithReflection.getHeight()
  75. +reflectionGap,0x70ffffff,0x00ffffff,TileMode.CLAMP);
  76. paint.setShader(shader);
  77. //SettheTransfermodetobeporterduffanddestinationin
  78. paint.setXfermode(newPorterDuffXfermode(Mode.DST_IN));
  79. //Drawarectangleusingthepaintwithourlineargradient
  80. canvas.drawRect(0,height,width,bitmapWithReflection.getHeight()
  81. +reflectionGap,paint);
  82. returnbitmapWithReflection;
  83. }
  84. }

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

[java] view plain copy
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns: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,代码如下:

[java] view plain copy
  1. packagecom.android.tutor;
  2. importandroid.app.Activity;
  3. importandroid.graphics.Bitmap;
  4. importandroid.graphics.drawable.Drawable;
  5. importandroid.os.Bundle;
  6. importandroid.widget.ImageView;
  7. publicclassImagedemoextendsActivity{
  8. privateImageViewmImageView01,mImageView02;
  9. publicvoidonCreate(BundlesavedInstanceState){
  10. super.onCreate(savedInstanceState);
  11. setContentView(R.layout.main);
  12. setupViews();
  13. }
  14. privatevoidsetupViews(){
  15. mImageView01=(ImageView)findViewById(R.id.image01);
  16. mImageView02=(ImageView)findViewById(R.id.image02);
  17. //获取壁纸返回值是Drawable
  18. Drawabledrawable=getWallpaper();
  19. //将Drawable转化为Bitmap
  20. Bitmapbitmap=ImageUtil.drawableToBitmap(drawable);
  21. //缩放图片
  22. BitmapzoomBitmap=ImageUtil.zoomBitmap(bitmap,100,100);
  23. //获取圆角图片
  24. BitmaproundBitmap=ImageUtil.getRoundedCornerBitmap(zoomBitmap,10.0f);
  25. //获取倒影图片
  26. BitmapreflectBitmap=ImageUtil.createReflectionImageWithOrigin(zoomBitmap);
  27. //这里可以让Bitmap再转化为Drawable
  28. //DrawableroundDrawable=newBitmapDrawable(roundBitmap);
  29. //DrawablereflectDrawable=newBitmapDrawable(reflectBitmap);
  30. //mImageView01.setBackgroundDrawable(roundDrawable);
  31. //mImageView02.setBackgroundDrawable(reflectDrawable);
  32. mImageView01.setImageBitmap(roundBitmap);
  33. mImageView02.setImageBitmap(reflectBitmap);
  34. }
  35. }

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

OK大功告成了!!

本文参考文献:http://wiki.impjq.net/doku.php?id=code:android-code:image-convert&rev=1275640889&mddo=print


come from:http://blog.csdn.net/android_tutor/article/details/5981753

更多相关文章

  1. Android(安卓)播放gif
  2. android之调用webservice 实现图片上传下载
  3. 【摘录】Google Android操作系统内核编译图文教程
  4. android 笔记 --- Android中几种图像特效处理的集锦
  5. Android之VideoView 进行播放视频
  6. Android高手进阶教程(七)之----Android(安卓)中Preferences的使
  7. android selector 背景选择器
  8. Android(安卓)Bluetooth源码分析总结 - framework部分
  9. Android的图像处理

随机推荐

  1. Android中你也许不知道的线性布局Layout_
  2. Android Apk打包过程概述:Android是如何打
  3. activity 的属性android:taskAffinity和a
  4. Qt的Android开发让程序全屏显示
  5. Android 绘图进阶(四):自定义View属性(灰常重
  6. 一个公开了源码的Android(安卓)UI 设计器
  7. Android多线程编程和线程池
  8. Android应用获取root权限,修改系统文件
  9. 给你的移动网站加点料:推荐下载App,如果本
  10. Android Service学习之AIDL, Parcelable