Android画图之Matrix

Matrix的操作,总共分为translate(平移),rotate(旋转),scale(缩放)和skew(倾斜)四种,每一种变换在Android的API里都提供了set, post和pre三种操作方式,除了translate,其他三种操作都可以指定中心点。
set是直接设置Matrix的值,每次set一次,整个Matrix的数组都会变掉。

post是后乘,当前的矩阵乘以参数给出的矩阵。可以连续多次使用post,来完成所需的整个变换。例如,要将一个图片旋转30度,然后平移到(100,100)的地方,那么可以这样做:

Matrix m = new Matrix();     
m.postRotate(30);     
m.postTranslate(100, 100); 
package eoeandroid.demo;   
  
import android.content.Context;   
import android.graphics.Bitmap;   
import android.graphics.Canvas;   
import android.graphics.Matrix;   
import android.graphics.Rect;   
import android.graphics.drawable.BitmapDrawable;   
import android.util.DisplayMetrics;   
import android.view.MotionEvent;   
import android.view.View;     
public class MyView extends View {     
private Bitmap mBitmap;     
private Matrix mMatrix = new Matrix();     
public MyView(Context context) {     
super(context);     
initialize();   
  
}   
  
private void initialize() {     
Bitmap bmp = ((BitmapDrawable)getResources().getDrawable(R.drawable.show)).getBitmap();   
  
mBitmap = bmp;   
  
/*首先,将缩放为100*100。这里scale的参数是比例。有一点要注意,如果直接用100/  bmp.getWidth()的话,会得到0,因为是整型相除,所以必须其中有一个是float型的,直接用100f就好。*/  
  
mMatrix.setScale(100f/bmp.getWidth(), 100f/bmp.getHeight());   
  
//平移到(100,100)处     
mMatrix.postTranslate(100, 100);     
//倾斜x和y轴,以(100,100)为中心。     
mMatrix.postSkew(0.2f, 0.2f, 100, 100);     
}   
  
@Override    protected void onDraw(Canvas canvas) {     
// super.onDraw(canvas); //如果界面上还有其他元素需要绘制,只需要将这句话写上就行了。     
canvas.drawBitmap(mBitmap, mMatrix, null);     
}   
  
}  


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值