Matrix类可以控制图形的平移,旋转,缩放,倾斜,也可以控制View组件的平移,旋转,倾斜等
下面的例子postInvalidate方法会重绘,随之调用onDraw方法,在onDraw方法里再对位图进行缩放和倾斜操作
package WangLi.Graphics.Matrix;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.drawable.BitmapDrawable;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.view.View;
public class MyView extends View {
//初始的图片资源
private Bitmap bitmap;
//Matrix实例
private android.graphics.Matrix matrix = new android.graphics.Matrix();
//设置倾斜度
private float sx = 0.0f;
//位图宽和高
private int width,height;
//缩放比例
private float scale = 1.0f;
//判断缩放还是旋转
private boolean isScale = false;
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
//获得位图
bitmap = ((BitmapDrawable)context.getResources().getDrawable(R.drawable.psb)).getBitmap();
//获得位图宽
width = bitmap.getWidth();
//获得位图高
height = bitmap.getHeight();
//使当前视图获得焦点
this.setFocusable(true);
}
protected void onDraw(Canvas canvas)
{
super.onDraw(canvas);
//重置Matrix
matrix.reset();
if(!isScale)
{
//旋转Matrix
matrix.setSkew(sx, 0);
}
else
{
//缩放Matrix
matrix.setScale(scale, scale);
}
//根据原始位图和Matrix创建新图片
Bitmap bitmap2 = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);
//绘制新位图
canvas.drawBitmap(bitmap2, matrix, null);
}
public boolean onKeyDown(int KeyCode,KeyEvent event)
{
switch(KeyCode)
{
//向左倾斜
case KeyEvent.KEYCODE_DPAD_LEFT:
isScale = false;
sx += 0.1;
postInvalidate();
break;
//向右倾斜
case KeyEvent.KEYCODE_DPAD_RIGHT:
isScale = false;
sx -= 0.1;
postInvalidate();
break;
//放大
case KeyEvent.KEYCODE_DPAD_UP:
isScale = true;
if(scale < 2.0)
scale += 0.1;
postInvalidate();
break;
//缩小
case KeyEvent.KEYCODE_DPAD_DOWN:
isScale = true;
if(scale > 0.5)
scale -= 0.1;
postInvalidate();
break;
}
return super.onKeyDown(KeyCode, event);
}
}
在Main.xml引用自定义的View组件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<WangLi.Graphics.Matrix.MyView android:layout_width="fill_parent" android:layout_height="fill_parent"/>
</LinearLayout>
下面是效果
![](https://img-my.csdn.net/uploads/201208/20/1345454060_2195.gif)