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

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

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

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

package com.android.tutor; import androidgraphicsBitmap; import androidgraphicsCanvas; import androidgraphicsLinearGradient; import androidgraphicsMatrix; import androidgraphicsPaint; import androidgraphicsPixelFormat; import androidgraphicsPorterDuffXfermode; import androidgraphicsRect; import androidgraphicsRectF; import androidgraphicsBitmapConfig; import androidgraphicsPorterDuffMode; import androidgraphicsShaderTileMode; import androidgraphicsdrawableDrawable; public class ImageUtil {      //放大缩小图片   public static Bitmap zoomBitmap(Bitmap bitmap,int w,int h){     int width = bitmapgetWidth();     int height = bitmapgetHeight();     Matrix matrix = new Matrix();     float scaleWidht = ((float)w / width);     float scaleHeight = ((float)h / height);     matrixpostScale(scaleWidht, scaleHeight);     Bitmap newbmp = BitmapcreateBitmap(bitmap, 0, 0, width, height, matrix, true);     return newbmp;   }   //将Drawable转化为Bitmap    public static Bitmap drawableToBitmap(Drawable drawable){       int width = drawablegetIntrinsicWidth();       int height = drawablegetIntrinsicHeight();       Bitmap bitmap = BitmapcreateBitmap(width, height,           drawablegetOpacity() != PixelFormatOPAQUE ? BitmapConfigARGB_8888               : BitmapConfigRGB_565);       Canvas canvas = new Canvas(bitmap);       drawablesetBounds(0,0,width,height);       drawabledraw(canvas);       return bitmap;            }        //获得圆角图片的方法   public static Bitmap getRoundedCornerBitmap(Bitmap bitmap,float roundPx){          Bitmap output = BitmapcreateBitmap(bitmapgetWidth(), bitmap         getHeight(), ConfigARGB_8888);     Canvas canvas = new Canvas(output);       final int color = 0xff424242;     final Paint paint = new Paint();     final Rect rect = new Rect(0, 0, bitmapgetWidth(), bitmapgetHeight());     final RectF rectF = new RectF(rect);       paintsetAntiAlias(true);     canvasdrawARGB(0, 0, 0, 0);     paintsetColor(color);     canvasdrawRoundRect(rectF, roundPx, roundPx, paint);       paintsetXfermode(new PorterDuffXfermode(ModeSRC_IN));     canvasdrawBitmap(bitmap, rect, rect, paint);       return output;   }   //获得带倒影的图片方法   public static Bitmap createReflectionImageWithOrigin(Bitmap bitmap){     final int reflectionGap = 4;     int width = bitmapgetWidth();     int height = bitmapgetHeight();          Matrix matrix = new Matrix();     matrixpreScale(1, -1);          Bitmap reflectionImage = BitmapcreateBitmap(bitmap,          0, height/2, width, height/2, matrix, false);          Bitmap bitmapWithReflection = BitmapcreateBitmap(width, (height + height/2), ConfigARGB_8888);          Canvas canvas = new Canvas(bitmapWithReflection);     canvasdrawBitmap(bitmap, 0, 0, null);     Paint deafalutPaint = new Paint();     canvasdrawRect(0, height,width,height + reflectionGap,         deafalutPaint);          canvasdrawBitmap(reflectionImage, 0, height + reflectionGap, null);          Paint paint = new Paint();     LinearGradient shader = new LinearGradient(0,         bitmapgetHeight(), 0, bitmapWithReflectiongetHeight()         + reflectionGap, 0x70ffffff, 0x00ffffff, TileModeCLAMP);     paintsetShader(shader);     // Set the Transfer mode to be porter duff and destination in     paintsetXfermode(new PorterDuffXfermode(ModeDST_IN));     // Draw a rectangle using the paint with our linear gradient     canvasdrawRect(0, height, width, bitmapWithReflectiongetHeight()         + reflectionGap, paint);       return bitmapWithReflection;   }    } 

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

<?xml version="0" encoding="utf-8"?>         

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

package comandroidtutor; import androidappActivity; import androidgraphicsBitmap; import androidgraphicsdrawableDrawable; import androidosBundle; import androidwidgetImageView; public class Imagedemo extends Activity {   private ImageView mImageView01,mImageView02;      public void onCreate(Bundle savedInstanceState) {     superonCreate(savedInstanceState);     setContentView(Rlayoutmain);     setupViews();   }      private void setupViews(){     mImageView01 = (ImageView)findViewById(Ridimage01);     mImageView02 = (ImageView)findViewById(Ridimage02);          //获取壁纸返回值是Drawable     Drawable drawable = getWallpaper();     //将Drawable转化为Bitmap     Bitmap bitmap = ImageUtildrawableToBitmap(drawable);     //缩放图片     Bitmap zoomBitmap = ImageUtilzoomBitmap(bitmap, 100, 100);     //获取圆角图片     Bitmap roundBitmap = ImageUtilgetRoundedCornerBitmap(zoomBitmap, 0f);     //获取倒影图片     Bitmap reflectBitmap = ImageUtilcreateReflectionImageWithOrigin(zoomBitmap);     //这里可以让Bitmap再转化为Drawable //   Drawable roundDrawable = new BitmapDrawable(roundBitmap);     //   Drawable reflectDrawable = new BitmapDrawable(reflectBitmap);     //   mImageViewsetBackgroundDrawable(roundDrawable); //   mImageViewsetBackgroundDrawable(reflectDrawable);              mImageViewsetImageBitmap(roundBitmap);     mImageViewsetImageBitmap(reflectBitmap);   }          } 

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

OK大功告成了!!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多相关文章

  1. Android(安卓)人脸识别+人脸匹配(OpenCV+JavaCV)
  2. [Android] 使用Matrix矩阵类对图像进行缩放、旋转、对比度、亮度
  3. android——再谈加载大量图片性能问题
  4. Android高手进阶教程(八)之----Android(安卓)Widget开发案例(世
  5. Android(安卓)9 网络适配 (系统造成App内图片无法加载解决方案)
  6. Android中Image的简单实例详解
  7. 【Android(安卓)4.0】Android(安卓)Icon Set的使用
  8. 发现自己喜欢了移动端开发--Android
  9. Android高手进阶教程(二)之----Android(安卓)Launcher抽屉类Slid

随机推荐

  1. Android3D游戏开发感觉
  2. Android 学习路线
  3. android aidl详解
  4. 绕过身份检测,破解Android SU
  5. Android 事件拦截/分发机制 (图解+代码)
  6. Android之android:launchMode
  7. 在Android里完美实现基站和WIFI定位
  8. Android 调用微信登陆、支付、分享,出现
  9. Android 分区挂载
  10. 130292015012 陈月凤 第一章作业