1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
public class MyView
extends View{
Bitmap myBitmap;
Paint paint;
public MyView(Context context, AttributeSet attrs) {
super
(context, attrs);
this
.initBitmap();
}
public void initBitmap(){
paint =
new Paint();
myBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.img);
}
@Override
protected void onDraw(Canvas canvas) {
super
.onDraw(canvas);
paint.setAntiAlias(
true
);
paint.setColor(Color.WHITE);
paint.setTextSize(
15
);
canvas.drawBitmap(myBitmap,
10
,
10
, paint);
//Saves the current matrix and clip onto a private stack.
//Subsequent calls to translate,scale,rotate,skew,concat or clipRect,clipPath
//will all operate as usual, but when the balancing call to restore() is made,
//those calls will be forgotten, and the settings that existed before the save() will be reinstated(恢复).
//Returns:
//The value to pass to restoreToCount() to balance this save()
int i = canvas.save();
System.out.println(
"current count -- > " + i);
Matrix m1 =
new Matrix();
m1.setTranslate(
500
,
10
);
Matrix m2 =
new Matrix();
m2.setRotate(
15
);
Matrix m3 =
new Matrix();
m3.setConcat(m1, m2);
m1.setScale(
0
.8f,
0
.8f);
m2.setConcat(m3, m1);
canvas.drawBitmap(myBitmap, m2, paint);
//This call balances a previous call to save(), and is used to
//remove all modifications to the matrix/clip state since the last save call.
//It is an error to call restore() more times than save() was called.
canvas.restore();
int j = canvas.save();
System.out.println(
"current count -- > " + j);
paint.setAlpha(
180
);
m1.setTranslate(
200
,
100
);
m2.setScale(
1
.3f,
1
.3f);
m2.setConcat(m1, m2);
canvas.drawBitmap(myBitmap, m3, paint);
//Restores the paint to its default settings.
paint.reset();
canvas.restore();
paint.setTextSize(
40
);
paint.setColor(Color.BLUE);
canvas.drawText(
"图片的宽度:" + myBitmap.getWidth(),
150
,
220
, paint);
canvas.drawText(
"图片的高度:" + myBitmap.getHeight(),
150
,
300
, paint);
paint.reset();
}
}
|