android Matrix工具的使用
Matrix工具类是对图形进行特效处理。
Matrix 是一个矩阵工具类,本身不能对图形进行变换,可以与其他API来结合使用。
获取Matrix对象,可以直接创建,可以从其他封装了Matrix类中获取,Transformation里面就封装了Matrix对象。
调用Matrix对象的方法可以对图形图像进行平移,缩放,旋转,倾斜等。
需要将程序对Matrix所做的变换应用到指定图像或组件上面。
下面是一个Matrix使用方法的例子,利用按键来控制Bitmap的倾斜和缩放。
class MyView extends View { /**源图*/ private Bitmap bitmap; /**Matrix对象*/ private Matrix matrix = new Matrix(); /**倾斜度*/ public float ox = 0.0f; /**缩放度*/ public float scale = 1.0f; /**源图尺寸*/ private int width, height; /**缩放还是倾斜*/ private boolean isScale = false; public MyView(Context context, AttributeSet attrs) { super(context, attrs); //得到位图 bitmap = ((BitmapDrawable) this.getResources().getDrawable( R.drawable.ic_launcher)).getBitmap(); width = bitmap.getWidth(); height = bitmap.getHeight(); //按键控制,首先要获取到焦点 this.setFocusable(true); } @SuppressLint("DrawAllocation") @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); //重置Matrix、倾斜状态时恢复到源图再进行缩放 matrix.reset(); if(isScale){ //x/y轴同比放大缩小 matrix.setScale(scale, scale); }else{ matrix.setSkew(ox,ox); } //得到新图 Bitmap b = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true); //将程序对Matrix所做的变换应用到指定图像或组件上面 canvas.drawBitmap(b, matrix, null); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { switch (keyCode) { case KeyEvent.KEYCODE_DPAD_LEFT://倾斜 isScale=false; ox+=0.1; //刷新界面,view类也有该方法 postInvalidate(); break; case KeyEvent.KEYCODE_DPAD_RIGHT://倾斜 isScale=false; ox-=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; default: break; } return super.onKeyDown(keyCode, event); } }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。