大家好,这一节给大家分享的是Android中几种图像特效处理的小技巧,比如圆角,倒影,还有就是图片缩放,Drawable转化为Bitmap,Bitmap转化为Drawable等等.
废话少说了,直接讲解今天的实例,本例主要是先获取壁纸(getWallpaper()),然后对当前壁纸的一些特效处理.大家按步骤一步一步来:
第一步:新建一个Android工程命名为ImageDemo,工程结构如下:
第二步:新建一个.java文件,命名为ImageUtil.java,在里面定义一些图片处理方法,代码如下:
001 | packagecom.android.tutor; |
002 | importandroid.graphics.Bitmap; |
003 | importandroid.graphics.Canvas; |
004 | importandroid.graphics.LinearGradient; |
005 | importandroid.graphics.Matrix; |
006 | importandroid.graphics.Paint; |
007 | importandroid.graphics.PixelFormat; |
008 | importandroid.graphics.PorterDuffXfermode; |
009 | importandroid.graphics.Rect; |
010 | importandroid.graphics.RectF; |
011 | importandroid.graphics.Bitmap.Config; |
012 | importandroid.graphics.PorterDuff.Mode; |
013 | importandroid.graphics.Shader.TileMode; |
014 | importandroid.graphics.drawable.Drawable; |
015 | publicclassImageUtil { |
018 | publicstaticBitmap zoomBitmap(Bitmap bitmap,intw,inth){ |
019 | intwidth = bitmap.getWidth(); |
020 | intheight = bitmap.getHeight(); |
021 | Matrix matrix =newMatrix(); |
022 | floatscaleWidht = ((float)w / width); |
023 | floatscaleHeight = ((float)h / height); |
024 | matrix.postScale(scaleWidht, scaleHeight); |
025 | Bitmap newbmp = Bitmap.createBitmap(bitmap,0,0, width, height, matrix,true); |
029 | publicstaticBitmap drawableToBitmap(Drawable drawable){ |
030 | intwidth = drawable.getIntrinsicWidth(); |
031 | intheight = drawable.getIntrinsicHeight(); |
032 | Bitmap bitmap = Bitmap.createBitmap(width, height, |
033 | drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 |
034 | : Bitmap.Config.RGB_565); |
035 | Canvas canvas =newCanvas(bitmap); |
036 | drawable.setBounds(0,0,width,height); |
037 | drawable.draw(canvas); |
043 | publicstaticBitmap getRoundedCornerBitmap(Bitmap bitmap,floatroundPx){ |
045 | Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap |
046 | .getHeight(), Config.ARGB_8888); |
047 | Canvas canvas =newCanvas(output); |
049 | finalintcolor =0xff424242; |
050 | finalPaint paint =newPaint(); |
051 | finalRect rect =newRect(0,0, bitmap.getWidth(), bitmap.getHeight()); |
052 | finalRectF rectF =newRectF(rect); |
054 | paint.setAntiAlias(true); |
055 | canvas.drawARGB(0,0,0,0); |
056 | paint.setColor(color); |
057 | canvas.drawRoundRect(rectF, roundPx, roundPx, paint); |
059 | paint.setXfermode(newPorterDuffXfermode(Mode.SRC_IN)); |
060 | canvas.drawBitmap(bitmap, rect, rect, paint); |
065 | publicstaticBitmap createReflectionImageWithOrigin(Bitmap bitmap){ |
066 | finalintreflectionGap =4; |
067 | intwidth = bitmap.getWidth(); |
068 | intheight = bitmap.getHeight(); |
070 | Matrix matrix =newMatrix(); |
071 | matrix.preScale(1, -1); |
073 | Bitmap reflectionImage = Bitmap.createBitmap(bitmap, |
074 | 0, height/2, width, height/2, matrix,false); |
076 | Bitmap bitmapWithReflection = Bitmap.createBitmap(width, (height + height/2), Config.ARGB_8888); |
078 | Canvas canvas =newCanvas(bitmapWithReflection); |
079 | canvas.drawBitmap(bitmap,0,0,null); |
080 | Paint deafalutPaint =newPaint(); |
081 | canvas.drawRect(0, height,width,height + reflectionGap, |
084 | canvas.drawBitmap(reflectionImage,0, height + reflectionGap,null); |
086 | Paint paint =newPaint(); |
087 | LinearGradient shader =newLinearGradient(0, |
088 | bitmap.getHeight(),0, bitmapWithReflection.getHeight() |
089 | + reflectionGap,0x70ffffff,0x00ffffff, TileMode.CLAMP); |
090 | paint.setShader(shader); |
092 | paint.setXfermode(newPorterDuffXfermode(Mode.DST_IN)); |
094 | canvas.drawRect(0, height, width, bitmapWithReflection.getHeight() |
095 | + reflectionGap, paint); |
097 | returnbitmapWithReflection; |
第三步:修改main.xml布局文件,主要放了两个ImageView控件,代码如下:
01 | <?xmlversion="1.0"encoding="utf-8"?> |
02 | <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" |
03 | android:orientation="vertical" |
04 | android:layout_width="fill_parent" |
05 | android:layout_height="fill_parent" |
08 | android:id="@+id/image01" |
09 | android:layout_width="wrap_content" |
10 | android:layout_height="wrap_content" |
11 | android:padding="10px" |
14 | android:id="@+id/image02" |
15 | android:layout_width="wrap_content" |
16 | android:layout_height="wrap_content" |
17 | android:padding="10px" |
第四步:修改主核心程序,ImageDemo.java,代码如下:
01 | packagecom.android.tutor; |
02 | importandroid.app.Activity; |
03 | importandroid.graphics.Bitmap; |
04 | importandroid.graphics.drawable.Drawable; |
05 | importandroid.os.Bundle; |
06 | importandroid.widget.ImageView; |
07 | publicclassImagedemoextendsActivity { |
08 | privateImageView mImageView01,mImageView02; |
10 | publicvoidonCreate(Bundle savedInstanceState) { |
11 | super.onCreate(savedInstanceState); |
12 | setContentView(R.layout.main); |
16 | privatevoidsetupViews(){ |
17 | mImageView01 = (ImageView)findViewById(R.id.image01); |
18 | mImageView02 = (ImageView)findViewById(R.id.image02); |
21 | Drawable drawable = getWallpaper(); |
23 | Bitmap bitmap = ImageUtil.drawableToBitmap(drawable); |
25 | Bitmap zoomBitmap = ImageUtil.zoomBitmap(bitmap,100,100); |
27 | Bitmap roundBitmap = ImageUtil.getRoundedCornerBitmap(zoomBitmap,10.0f); |
29 | Bitmap reflectBitmap = ImageUtil.createReflectionImageWithOrigin(zoomBitmap); |
36 | mImageView01.setImageBitmap(roundBitmap); |
37 | mImageView02.setImageBitmap(reflectBitmap); |
第五步:运行上述工程,查看效果如下:

OK大功告成了!!
注:本文来源于网络,具体出处无从考察。