Android Marix

	/**********************************************
	 * Matrix是Android提供的一个工具类,可以与其他API结合实现图形组件的变化。
	 * 
	 * 可以实现组件的平移,倾斜,旋转,缩放等。 步骤:
	 * 
	 * 1.获取Matrix对象。Matrix ma trix = new Matrix();
	 * 
	 * 2.调用Matrix方法进行平移,旋转,缩放,倾斜 如旋转Matrix: matrix.setSkew(sx, 0);
	 * 缩放:matrix.setScale(scale, scale);
	 * 
	 * 3.应用到组件Bitmap newBitmap = Bitmap.createBitmap(bitmap, 0, 0, width,
	 * height, matrix, true);
	 * 
	 * 
	 **********************************************/


API

public void setTranslate(float dx, float dy)  // 控制Matir进行平移

public void setSkew(float kx, float ky, float px, float py) // 控制Matirx以px,py进行倾斜,kx,ky为X、Y方向上的距离
public void setSkew(float kx, float ky)  // 控制Matirx进行倾斜,kx,ky为X,Y方向上的距离

public void setRotate(float degrees, float px, float py) //以px,py为轴心进行旋转 degrees为旋转角度
public void setRotate(float degrees) // 控制Matrix进行旋转,degrees为旋转角度
	
public void setScale(float sx, float sy, float px, float py) // 控制Maritx以px,py为轴心进行缩放,sx,sy控制X,Y方向上的缩放比例
public void setScale(float sx, float sy) // 控制Maritx以px,py为轴心进行缩放,sx,sy控制X,Y方向上的缩放比例


示例:实现按ADWS分别实现 向左倾斜,向右倾斜,放大缩小

 

public class MyView extends View {

	// 初始化图片资源
	private Bitmap bitmap;
	// Matrix实例
	private Matrix matrix = new Matrix();
	// 设置倾斜度
	private float sx = 0.0f;
	// 位图宽和高
	private int width, height;
	// 缩放比例
	private float scale = 1.0f;
	// 判断是缩放还是旋转
	private boolean isScale = false;

	public MyView(Context context, AttributeSet set) {
		super(context, set);
		// TODO Auto-generated constructor stub
		// 获得位图
		bitmap = ((BitmapDrawable) context.getResources().getDrawable(
				R.drawable.icon1)).getBitmap();
		// 获得位图宽高
		width = bitmap.getWidth();
		height = bitmap.getHeight();
		// 是当前视图获得焦点
		this.setFocusable(true);

	}

	@Override
	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);
		// 重置Matirx
		matrix.reset();
		if (!isScale) {
			// 旋转Matrix
			matrix.setSkew(sx, 0);

		} else {
			// 缩放Matrix
			matrix.setScale(scale, scale);
		}
		// 根据原始位图和Matrix创建新图片
		Bitmap newBitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height,
				matrix, true);
		// 绘制新位图
		canvas.drawBitmap(newBitmap, matrix, null);
	}

	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		switch (keyCode) {
		// 向左倾斜
		case KeyEvent.KEYCODE_A:
			isScale = false;
			sx += 0.1;
			postInvalidate(); // 在非UI进程中使用  应该就是onDraw中
			break;

		case KeyEvent.KEYCODE_D:
			isScale = false;
			sx -= 0.1;
			postInvalidate(); // 在非UI进程中使用
			break;
		// 放大
		case KeyEvent.KEYCODE_W:
			isScale = true;
			if (scale < 2.0)
				scale += 0.1;
			postInvalidate(); // 在非UI进程中使用
			break;
		// 缩小
		case KeyEvent.KEYCODE_S:
			isScale = true;
			if (scale > 0.5)
				scale -= 0.1;
			postInvalidate(); // 在非UI进程中使用
			break;
		default:
			break;
		}
		return super.onKeyDown(keyCode, event);
	}

}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值