今天无意间看到了http://chroya.iteye.com/blog/713869的帖子,突然间就对这个Matrix来了兴趣,没事就瞎整一下,在这总结一下自己的心得体会!
Matrix的操作,总共分为translate(平移),rotate(旋转),scale(缩放)和skew(倾斜)四种,每一种变换在Android的API里都提供了set, post和pre三种操作方式,除了translate,其他三种操作都可以指定中心点。
set是直接设置Matrix的值,每次set一次,整个Matrix的数组都会变掉。
post是后乘,当前的矩阵乘以参数给出的矩阵。可以连续多次使用post,来完成所需的整个变换。
咱新手,你懂得!
Bitmap b = BitmapFactory.decodeResource(getResources(), R.drawable.wewew);
Bitmap c =Bitmap.createBitmap(b.getWidth(),b.getHeight(),Bitmap.Config.ARGB_8888);
Paint p = new Paint();
p.setColor(Color.RED);
Canvas canvas = new Canvas(c);
Matrix m = new Matrix();
canvas.drawBitmap(b, m, null);
ImageView imageView = new ImageView(MainActivity.this);
imageView.setImageBitmap(c);
运行结果:
为Matrix添加属性:
m.setScale(100f/b.getWidth(), 100f/b.getHeight());
运行结果:
哈哈,变小了,这个setScale是设置缩放比例的(这里将缩放为100*100,有一点要注意,如果直接用100/bmp.getWidth()的话,会得到0,因为是整型相除,所以必须其中有一个是float型的,直接用100f就好);
为Matrix继续添加属性:
m.postTranslate(50, 0);
运行结果:
看出来了吧,这个是让图片在屏幕在平移的,里面的参数是平移量
为Matrix添加继续属性:
m.postRotate(30);
运行结果:
它旋转了,这个方法是控制旋转的,参数是他的旋转的度数,注意:是顺时针旋转的!