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();
}
}
|