第一步:新建一个Android工程命名为ImageDemo,工程结构如下:
第二步.java文件ImageUtil.java,在里面定义一些图片处理方法<span
color:#333333;"="" style="font-size: 10.5pt; ">,代码如下:
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);
|
091
|
//
Set the Transfer mode to be porter duff and destination in
|
092
|
paint.setXfermode(newPorterDuffXfermode(Mode.DST_IN));
|
093
|
//
Draw a rectangle using the paint with our linear gradient
|
094
|
canvas.drawRect(0,
height, width, bitmapWithReflection.getHeight()
|
095
|
+
reflectionGap, paint);
|
097
|
returnbitmapWithReflection;
|
第三步:修改main.xml布局文件,主要放了两个ImageView控件,代码如下:
1
|
<!--?xml
version="1.0" encoding="utf-8"?-->
|
第四步:修改主核心程序,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
|
publicclassImagedemo
extendsActivity
{
|
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);
|
30
|
//这里可以让Bitmap再转化为Drawable
|
31
|
//
Drawable roundDrawable = new BitmapDrawable(roundBitmap);
|
32
|
//
Drawable reflectDrawable = new BitmapDrawable(reflectBitmap);
|
33
|
//
mImageView01.setBackgroundDrawable(roundDrawable);
|
34
|
//
mImageView02.setBackgroundDrawable(reflectDrawable);
|
36
|
mImageView01.setImageBitmap(roundBitmap);
|
37
|
mImageView02.setImageBitmap(reflectBitmap);
|
第五步:运行上述工程,查看效果如下:
相关文章: