Android开发ImageUtils工具演示

该工具提供缩放   drawable转换bitmap   转换倒影图     转换成圆角图

 1 package com.nailsoul.imagedemo.utils;  2 

 3 import android.graphics.Bitmap;  4 import android.graphics.Canvas;  5 import android.graphics.LinearGradient;  6 import android.graphics.Matrix;  7 import android.graphics.Paint;  8 import android.graphics.PixelFormat;  9 import android.graphics.PorterDuffXfermode;  10 import android.graphics.Rect;  11 import android.graphics.RectF;  12 import android.graphics.Bitmap.Config;  13 import android.graphics.PorterDuff.Mode;  14 import android.graphics.Shader.TileMode;  15 import android.graphics.drawable.Drawable;  16 

 17 public class ImageUtil {  18 

 19     /**

 20  * 放大缩小图片  21  * @param bitmap 要放大的图片  22  * @param dstWidth 目标宽  23  * @param dstHeight 目标高  24  * @return

 25      */

 26     public static Bitmap zoomBitmap(Bitmap bitmap, int dstWidth, int dstHeight) {  27         int width = bitmap.getWidth();  28         int height = bitmap.getHeight();  29         Matrix matrix = new Matrix();  30         float scaleWidht = ((float) dstWidth / width);  31         float scaleHeight = ((float) dstHeight / height);  32  matrix.postScale(scaleWidht, scaleHeight);  33         Bitmap newbmp = Bitmap.createBitmap(bitmap, 0, 0, width, height,  34                 matrix, true);  35         return newbmp;  36  }  37 

 38     /**

 39  * 将Drawable转化为Bitmap  40  * @param drawable  41  * @return

 42      */

 43     public static Bitmap drawableToBitmap(Drawable drawable) {  44         int width = drawable.getIntrinsicWidth();  45         int height = drawable.getIntrinsicHeight();  46         Bitmap bitmap = Bitmap.createBitmap(width, height, drawable  47                 .getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888  48  : Bitmap.Config.RGB_565);  49         Canvas canvas = new Canvas(bitmap);  50         drawable.setBounds(0, 0, width, height);  51  drawable.draw(canvas);  52         return bitmap;  53 

 54  }  55 

 56     /**

 57  * 获得圆角图片的方法  58  * @param bitmap  59  * @param roundPx 4脚幅度  60  * @return

 61      */

 62     public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, float roundPx) {  63 

 64         Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),  65  bitmap.getHeight(), Config.ARGB_8888);  66         Canvas canvas = new Canvas(output);  67 

 68         final int color = 0xff424242;  69         final Paint paint = new Paint();  70         final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());  71         final RectF rectF = new RectF(rect);  72 

 73         paint.setAntiAlias(true);  74         canvas.drawARGB(0, 0, 0, 0);  75  paint.setColor(color);  76  canvas.drawRoundRect(rectF, roundPx, roundPx, paint);  77 

 78         paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));  79  canvas.drawBitmap(bitmap, rect, rect, paint);  80 

 81         return output;  82  }  83 

 84     /**

 85  * 获得带倒影的图片方法  86  * @param bitmap  87  * @return

 88      */

 89     public static Bitmap createReflectionImageWithOrigin(Bitmap bitmap) {  90         final int reflectionGap = 4;  91         int width = bitmap.getWidth();  92         int height = bitmap.getHeight();  93 

 94         Matrix matrix = new Matrix();  95         matrix.preScale(1, -1);  96 

 97         Bitmap reflectionImage = Bitmap.createBitmap(bitmap, 0, height / 2,  98                 width, height / 2, matrix, false);  99 

100         Bitmap bitmapWithReflection = Bitmap.createBitmap(width, 101                 (height + height / 2), Config.ARGB_8888); 102 

103         Canvas canvas = new Canvas(bitmapWithReflection); 104         canvas.drawBitmap(bitmap, 0, 0, null); 105         Paint deafalutPaint = new Paint(); 106         canvas.drawRect(0, height, width, height + reflectionGap, deafalutPaint); 107 

108         canvas.drawBitmap(reflectionImage, 0, height + reflectionGap, null); 109 

110         Paint paint = new Paint(); 111         LinearGradient shader = new LinearGradient(0, bitmap.getHeight(), 0, 112                 bitmapWithReflection.getHeight() + reflectionGap, 0x70ffffff, 113                 0x00ffffff, TileMode.CLAMP); 114  paint.setShader(shader); 115         // Set the Transfer mode to be porter duff and destination in

116         paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN)); 117         // Draw a rectangle using the paint with our linear gradient

118         canvas.drawRect(0, height, width, bitmapWithReflection.getHeight() 119                 + reflectionGap, paint); 120 

121         return bitmapWithReflection; 122  } 123 

124 }

 

 1 package com.nailsoul.imagedemo;  2 

 3 import java.util.Random;  4 

 5 import android.app.Activity;  6 import android.graphics.Bitmap;  7 import android.graphics.drawable.Drawable;  8 import android.os.Bundle;  9 import android.view.View; 10 import android.view.Window; 11 import android.view.WindowManager; 12 import android.widget.ImageView; 13 import android.widget.TextView; 14 

15 import com.nailsoul.imagedemo.utils.ImageUtil; 16 

17 public class ImageDemoActivity extends Activity { 18     private ImageView mIv01, mIv02,mIv03; 19     private TextView mTv01, mtv02,mtv03,mtv00; 20 

21     public void onCreate(Bundle savedInstanceState) { 22         super.onCreate(savedInstanceState); 23         int flag=WindowManager.LayoutParams.FLAG_FULLSCREEN; 24  getWindow().setFlags(flag,flag); 25  getWindow().requestFeature(Window.FEATURE_NO_TITLE); 26  setContentView(R.layout.main); 27  setupViews(); 28  } 29 

30     private void setupViews() { 31         mIv01 = findView(R.id.image01); 32         mIv02 = findView(R.id.image02); 33         mIv03 = findView(R.id.image03); 34         mtv00=findView(R.id.text00); 35         mTv01=findView(R.id.text01); 36         mtv02=findView(R.id.text02); 37         mtv03=findView(R.id.text03); 38 

39         // 获取壁纸返回值是Drawable 40 // Drawable drawable = getWallpaper();

41         Drawable drawable=getResources().getDrawable(R.drawable.a1+new Random().nextInt(15)); 42         // 将Drawable转化为Bitmap

43         Bitmap bitmap = ImageUtil.drawableToBitmap(drawable); 44         // 缩放图片

45         Bitmap zoomBitmap = ImageUtil.zoomBitmap(bitmap, 355, 317); 46         // 获取圆角图片

47         Bitmap roundBitmap = ImageUtil 48                 .getRoundedCornerBitmap(bitmap, 10.0f); 49         // 获取倒影图片

50         Bitmap reflectBitmap = ImageUtil 51  .createReflectionImageWithOrigin(zoomBitmap); 52         // 这里可以让Bitmap再转化为Drawable 53         // Drawable roundDrawable = new BitmapDrawable(roundBitmap); 54         // Drawable reflectDrawable = new BitmapDrawable(reflectBitmap); 55         // mImageView01.setBackgroundDrawable(roundDrawable); 56         // mImageView02.setBackgroundDrawable(reflectDrawable);

57 

58  mIv01.setImageBitmap(roundBitmap); 59  mIv02.setImageBitmap(reflectBitmap); 60  mIv03.setImageBitmap(zoomBitmap); 61         mtv00.setText("ImageUtils演示"); 62         mTv01.setText("上图为圆角图   width:"+roundBitmap.getWidth()+"height:"+roundBitmap.getHeight()); 63         mtv02.setText("上图为倒影图   width:"+reflectBitmap.getWidth()+"height:"+reflectBitmap.getHeight()); 64         mtv03.setText("上图为缩放图   width:"+zoomBitmap.getWidth()+"height:"+zoomBitmap.getHeight()); 65  } 66     

67     

68 

69     public <T> T findView(int id){ 70         return (T) super.findViewById(id); 71  } 72 }

 

 1 <?xml version="1.0" encoding="utf-8"?>

 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

 3     android:layout_width="fill_parent"

 4     android:layout_height="fill_parent"

 5     android:orientation="vertical" >

 6 

 7     <ScrollView

 8         android:layout_width="fill_parent"

 9         android:layout_height="fill_parent"

10         android:scrollbars="vertical" >

11 

12         <LinearLayout

13             android:layout_width="fill_parent"

14             android:layout_height="fill_parent"

15             android:orientation="vertical" >

16 

17             <TextView

18                 android:id="@+id/text00"

19                 android:layout_width="fill_parent"

20                 android:layout_height="wrap_content"

21                 android:gravity="center" />

22 

23             <ImageView

24                 android:id="@+id/image01"

25                 android:layout_width="wrap_content"

26                 android:layout_height="wrap_content"

27                 android:padding="10px" />

28 

29             <TextView

30                 android:id="@+id/text01"

31                 android:layout_width="fill_parent"

32                 android:layout_height="wrap_content"

33                 android:gravity="center" />

34 

35             <ImageView

36                 android:id="@+id/image02"

37                 android:layout_width="wrap_content"

38                 android:layout_height="wrap_content"

39                 android:padding="10px" />

40 

41             <TextView

42                 android:id="@+id/text02"

43                 android:layout_width="fill_parent"

44                 android:layout_height="wrap_content"

45                 android:gravity="center" />

46 

47             <ImageView

48                 android:id="@+id/image03"

49                 android:layout_width="wrap_content"

50                 android:layout_height="wrap_content"

51                 android:padding="10px" />

52 

53             <TextView

54                 android:id="@+id/text03"

55                 android:layout_width="fill_parent"

56                 android:layout_height="wrap_content"

57                 android:gravity="center" />

58         </LinearLayout>

59     </ScrollView>

60 

61 </LinearLayout>

 

来源:http://www.open-open.com/lib/view/open1382151866948.html

 

 

 

你可能感兴趣的:(Android开发)