Android Matrix对图片进行倾斜、缩放变换

来源:互联网 发布:集贤一中网络空间首页 编辑:程序博客网 时间:2024/05/21 04:17

本文内容摘自《疯狂Android讲义 第3版》李刚 著
这里写图片描述

通过Matrix对图片进行倾斜、缩放变换:

package shortcut.song.com.myapplication;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;public class MatrixActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(new MatrixView(this, null));    }}
package shortcut.song.com.myapplication;import android.content.Context;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Matrix;import android.graphics.drawable.BitmapDrawable;import android.util.AttributeSet;import android.view.KeyEvent;import android.view.View;/** * Created by Administrator on 2017/7/15 0015. */public class MatrixView 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 MatrixView(Context context, AttributeSet set)    {        super(context, set);        //获得位图        bitmap = ((BitmapDrawable) context.getResources().getDrawable(R.drawable.lijiang)).getBitmap();        //获得位图宽度        width = bitmap.getWidth();        //获得位图高度        height = bitmap.getHeight();        //使当前视图获得焦点        this.setFocusable(true);    }    @Override    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);    }    @Override    public boolean onKeyDown(int keyCode, KeyEvent event) {        switch (keyCode)        {            case KeyEvent.KEYCODE_A:                isScale = false;                sx += 0.1;                postInvalidate();                break;            case KeyEvent.KEYCODE_D:                isScale = false;                sx -= 0.1;                postInvalidate();                break;            case KeyEvent.KEYCODE_W:                isScale = true;                if (scale < 2.0)                {                    scale += 0.1;                }                postInvalidate();                break;            case KeyEvent.KEYCODE_S:                isScale = true;                if (scale > 0.5)                {                    scale -= 0.1;                }                postInvalidate();                break;          }        return super.onKeyDown(keyCode, event);    }}
阅读全文
0 0