您的位置:首页 > 移动开发 > Android开发

初学Android,图形图像之Matrix(二十九)

2012-08-20 17:02 267 查看
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>
下面是效果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: