Android matrix 控制图片的旋转、缩放、移动

本文主要讲解利用android中Matrix控制图形的旋转缩放移动,具体参见一下代码:

/**
 * 使用矩阵控制图片移动、缩放、旋转
 * @author 张进
 */
public class CommonImgEffectView extends View {
    private Context context ;
    private Bitmap mainBmp , controlBmp ;
    private int mainBmpWidth , mainBmpHeight , controlBmpWidth , controlBmpHeight ;
    private Matrix matrix ; 
    private float [] srcPs , dstPs ;
    private RectF srcRect , dstRect ;
    private Paint paint ,paintRect , paintFrame;
    private float deltaX = 0, deltaY = 0; //位移值
    private float scaleValue = 1; //缩放值
    private Point lastPoint ;
    private Point prePivot , lastPivot;
    private float preDegree , lastDegree ;
    private short currentSelectedPointindex;        //当前操作点击点
    private Point symmetricPoint  = new Point();    //当前操作点对称点
    
    /**
     * 图片操作类型
     */
    public static final int OPER_DEFAULT = -1;      //默认
    public static final int OPER_TRANSLATE = 0;     //移动
    public static final int OPER_SCALE = 1;         //缩放
    public static final int OPER_ROTATE = 2;        //旋转
    public static final int OPER_SELECTED = 3;      //选择
    public int lastOper = OPER_DEFAULT;
    
    /* 图片控制点
     * 0---1---2
     * |       |
     * 7   8   3
     * |       |
     * 6---5---4 
     */
    public static final int CTR_NONE = -1;
    public static final int CTR_LEFT_TOP = 0;
    public static final int CTR_MID_TOP = 1;
    public static final int CTR_RIGHT_TOP = 2;
    public static final int CTR_RIGHT_MID = 3;
    public static final int CTR_RIGHT_BOTTOM = 4;
    public static final int CTR_MID_BOTTOM = 5;
    public static final int CTR_LEFT_BOTTOM = 6;
    public static final int CTR_LEFT_MID = 7;
    public static final int CTR_MID_MID = 8;
    public int current_ctr = CTR_NONE;
    
    public CommonImgEffectView(Context context){
        super(context);
        this.context = context ;
        initData();
    }
    
    public CommonImgEffectView(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.context = context ;
        initData();
    }
    
    /**
     * 初始化数据
     * @author 张进
     */
    private void initData(){
        mainBmp = BitmapFactory.decodeResource(this.context.getResources(), R.drawable.flower);
        controlBmp = BitmapFactory.decodeResource(this.context.getResources(), R.drawable.control);
        mainBmpWidth = mainBmp.getWidth();
    
  • 8
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 22
    评论
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值