package
com.img.util;
import
android.graphics.Bitmap;
import
android.graphics.Bitmap.Config;
import
android.graphics.Canvas;
import
android.graphics.LinearGradient;
import
android.graphics.Matrix;
import
android.graphics.Paint;
import
android.graphics.PixelFormat;
import
android.graphics.PorterDuff.Mode;
import
android.graphics.PorterDuffXfermode;
import
android.graphics.Rect;
import
android.graphics.RectF;
import
android.graphics.Shader.TileMode;
import
android.graphics.drawable.Drawable;
public
class
ImgUtil {
//
放大缩小图片
public
static
Bitmap zoomBitmap(Bitmap bitmap,
int
w,
int
h) {
int
width
=
bitmap.getWidth();
int
height
=
bitmap.getHeight();
Matrix matrix
=
new
Matrix();
float
scaleWidth
=
((
float
) w
/
width);
float
scaleHeight
=
((
float
) h
/
height);
matrix.postScale(scaleWidth, 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;
}
}
package
com.img.util;
import
android.app.Activity;
import
android.graphics.Bitmap;
import
android.graphics.drawable.Drawable;
import
android.os.Bundle;
import
android.widget.ImageView;
public
class
MainActivity
extends
Activity {
private
ImageView mImageView01, mImageView02;
@Override
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
=
ImgUtil.drawableToBitmap(drawable);
//
缩放图片
Bitmap zoomBitmap
=
ImgUtil.zoomBitmap(bitmap,
100
,
100
);
//
获取圆角图片
Bitmap roundBitmap
=
ImgUtil
.getRoundedCornerBitmap(zoomBitmap,
10.0f
);
//
获取倒影图片
Bitmap reflectBitmap
=
ImgUtil
.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);
}
}