给大家分享的是Android图像特效处理的小技巧,比如圆角、倒影、还有就是图片缩放、Drawable转化为Bitmap、Bitmap转化为Drawable等等。

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

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

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

package com.android.tutor; import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.LinearGradient;import android.graphics.Matrix;import android.graphics.Paint;import android.graphics.PixelFormat;import android.graphics.PorterDuffXfermode;import android.graphics.Rect;import android.graphics.RectF;import android.graphics.Bitmap.Config;import android.graphics.PorterDuff.Mode;import android.graphics.Shader.TileMode;import android.graphics.drawable.Drawable; public class ImageUtil {     // 放大缩小图片    public static Bitmap zoomBitmap(Bitmap bitmap, int w, int h) {        int width = bitmap.getWidth();        int height = bitmap.getHeight();        Matrix matrix = new Matrix();        float scaleWidht = ((float) w / width);        float scaleHeight = ((float) h / height);        matrix.postScale(scaleWidht, scaleHeight);        Bitmap newbmp = Bitmap.createBitmap(bitmap, 0, 0, width, height,                matrix, true);        return newbmp;    }     // 将Drawable转化为Bitmap    public static Bitmap drawableToBitmap(Drawable drawable) {        int width = drawable.getIntrinsicWidth();        int height = drawable.getIntrinsicHeight();        Bitmap bitmap = Bitmap.createBitmap(width, height, drawable                .getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888                : Bitmap.Config.RGB_565);        Canvas canvas = new Canvas(bitmap);        drawable.setBounds(0, 0, width, height);        drawable.draw(canvas);        return bitmap;     }     // 获得圆角图片的方法    public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, float roundPx) {         Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),                bitmap.getHeight(), Config.ARGB_8888);        Canvas canvas = new Canvas(output);         final int color = 0xff424242;        final Paint paint = new Paint();        final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());        final RectF rectF = new RectF(rect);         paint.setAntiAlias(true);        canvas.drawARGB(0, 0, 0, 0);        paint.setColor(color);        canvas.drawRoundRect(rectF, roundPx, roundPx, paint);         paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));        canvas.drawBitmap(bitmap, rect, rect, paint);         return output;    }     // 获得带倒影的图片方法    public static Bitmap createReflectionImageWithOrigin(Bitmap bitmap) {        final int reflectionGap = 4;        int width = bitmap.getWidth();        int height = bitmap.getHeight();         Matrix matrix = new Matrix();        matrix.preScale(1, -1);         Bitmap reflectionImage = Bitmap.createBitmap(bitmap, 0, height / 2,                width, height / 2, matrix, false);         Bitmap bitmapWithReflection = Bitmap.createBitmap(width,                (height + height / 2), Config.ARGB_8888);         Canvas canvas = new Canvas(bitmapWithReflection);        canvas.drawBitmap(bitmap, 0, 0, null);        Paint deafalutPaint = new Paint();        canvas.drawRect(0, height, width, height + reflectionGap, deafalutPaint);         canvas.drawBitmap(reflectionImage, 0, height + reflectionGap, null);         Paint paint = new Paint();        LinearGradient shader = new LinearGradient(0, bitmap.getHeight(), 0,                bitmapWithReflection.getHeight() + reflectionGap, 0x70ffffff,                0x00ffffff, TileMode.CLAMP);        paint.setShader(shader);        // Set the Transfer mode to be porter duff and destination in        paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));        // Draw a rectangle using the paint with our linear gradient        canvas.drawRect(0, height, width, bitmapWithReflection.getHeight()                + reflectionGap, paint);         return bitmapWithReflection;    } }

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

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    >    <ImageView        android:id="@+id/image01"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:padding="10px"        />    <ImageView        android:id="@+id/image02"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:padding="10px"    /></LinearLayout>

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

package com.android.tutor; import android.app.Activity;import android.graphics.Bitmap;import android.graphics.drawable.Drawable;import android.os.Bundle;import android.widget.ImageView; public class Imagedemo extends Activity {         private ImageView mImageView01, mImageView02;     public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        setupViews();    }     private void setupViews() {                 mImageView01 = (ImageView) findViewById(R.id.image01);        mImageView02 = (ImageView) findViewById(R.id.image02);         // 获取壁纸返回值是Drawable        Drawable drawable = getWallpaper();        // 将Drawable转化为Bitmap        Bitmap bitmap = ImageUtil.drawableToBitmap(drawable);        // 缩放图片        Bitmap zoomBitmap = ImageUtil.zoomBitmap(bitmap, 100, 100);        // 获取圆角图片        Bitmap roundBitmap = ImageUtil                .getRoundedCornerBitmap(zoomBitmap, 10.0f);        // 获取倒影图片        Bitmap reflectBitmap = ImageUtil                .createReflectionImageWithOrigin(zoomBitmap);        // 这里可以让Bitmap再转化为Drawable        // Drawable roundDrawable = new BitmapDrawable(roundBitmap);        // Drawable reflectDrawable = new BitmapDrawable(reflectBitmap);        // mImageView01.setBackgroundDrawable(roundDrawable);        // mImageView02.setBackgroundDrawable(reflectDrawable);         mImageView01.setImageBitmap(roundBitmap);        mImageView02.setImageBitmap(reflectBitmap);    } }

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

更多相关文章

  1. Android消息处理机制:源码剖析Handler、Looper,并实现图片异步加载
  2. Android(安卓)获取并显示远程图片 Picasso框架的使用(二)
  3. Android中几种图像特效处理的集锦!!
  4. Android(安卓)显示系统键盘搜索按键,实现搜索功能
  5. Android简单、灵活、高效的图片裁剪框架 Android-ImageClipper
  6. android 学习总结
  7. Android(安卓)ListView异步加载图片乱序问题,原因分析及解决方案
  8. Android开发之实现图片自动滚动显示标签的ViewPager
  9. Android(安卓)2.2新增Widget之ProtipWidget源码

随机推荐

  1. 圣怀布局,网格(容器,项目,单元,轨道,间距
  2. DSaaS,一个创新的云密码服务
  3. Node实战篇:Nodejs 链接 Mariadb 实例
  4. Veeam v11 重量级功能 不可变存储库(Linux
  5. Z投稿 | Zabbix如何通过ODBC对接Oracle获
  6. 苹果Mac笔记本电脑如何开启热点分享网络?
  7. 某精密结构件公司研发软件授权许可监控及
  8. Redis 内存为什么不宜过大
  9. PHP 共享内存使用场景及注意点
  10. CDH启动lzo压缩