手势图片

来源:互联网 发布:免费手机视频制作软件 编辑:程序博客网 时间:2024/06/11 20:57

在Android中实现手势对于图片的操作,首先需要对MotionEvent以及Matrix两个类有所了解实现对手势的识别以及图片变动的操作。
在实现该功能时候需要在xml中要将图片的缩放格式改成Matrix才行.

下面代码主要实现两个demo,一个是关于matrix的简单测试以及图片的手势缩放与移动demo.。。

XML代码如下:

<?xmlversion="1.0"encoding="UTF-8"?>
    <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_height="fill_parent"android:layout_width="fill_parent"android:id="@+id/linearLayout1"android:weightSum="1">
        <ImageViewandroid:layout_width="wrap_content"android:id="@+id/imag"android:layout_height="wrap_content"android:src="@drawable/a"
        android:layout_gravity="center"
        android:scaleType="matrix"
        ></ImageView>
        <ImageViewandroid:layout_width="wrap_content"
       
        android:id="@+id/imag1"
        android:scaleType="matrix"
        android:layout_height="wrap_content"></ImageView>
    </LinearLayout>

实现代码:
 
packagehfut.gmm;
 
importandroid.app.Activity;
importandroid.content.Context;
importandroid.graphics.Bitmap;
importandroid.graphics.BitmapFactory;
importandroid.graphics.Canvas;
importandroid.graphics.Color;
importandroid.graphics.Matrix;
importandroid.graphics.Paint;
importandroid.graphics.PointF;
importandroid.os.Bundle;
importandroid.util.DisplayMetrics;
importandroid.util.FloatMath;
importandroid.util.Log;
importandroid.view.GestureDetector;
importandroid.view.MotionEvent;
importandroid.view.View;
importandroid.view.GestureDetector.OnGestureListener;
importandroid.view.View.OnTouchListener;
importandroid.view.animation.AnimationUtils;
importandroid.widget.ImageView;
 
publicclass Img_control extendsActivity implementsOnTouchListener {//implements OnTouchListener {
    privateImageView imgview;
    privateImageView img;
  
     
    privateMatrix matrix=newMatrix();
    privateMatrix savedMatrix=newMatrix();
     
    staticfinal int NONE = 0
    staticfinal int DRAG = 1
    staticfinal int ZOOM = 2
    intmode = NONE; 
 
    // Remember some things for zooming 
    PointF start = newPointF(); 
    PointF mid = newPointF(); 
    floatoldDist = 1f; 
     
    //private GestureDetector gesture;
    @Override
    protectedvoid onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        this.setContentView(R.layout.img_control);
        imgview=(ImageView)this.findViewById(R.id.imag1);
        imgview.setAnimation(AnimationUtils.loadAnimation(this, R.anim.newanim));
         
         
        img=(ImageView)this.findViewById(R.id.imag);
        Matrix mt=img.getImageMatrix();
        //mt.postRotate(30);
        mt.postScale(0.5f,0.5f);mt.postScale(1.5f,1.5f);
        mt.postRotate(30130100);
        mt.postTranslate(10010);
         
        img.setImageMatrix(mt);
         
     
        //imgview.setLongClickable(true);
         
        imgview.setImageBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.a));
        imgview.setOnTouchListener(this);
        imgview.setLongClickable(true);
         
    }
    privatefloat spacing(MotionEvent event) { 
        floatx = event.getX(0) - event.getX(1); 
        floaty = event.getY(0) - event.getY(1); 
        returnFloatMath.sqrt(x * x + y * y); 
 
  
      privatevoid midPoint(PointF point, MotionEvent event) { 
        floatx = event.getX(0) + event.getX(1); 
        floaty = event.getY(0) + event.getY(1); 
        point.set(x / 2, y / 2); 
    @Override
    publicboolean onTouch(View v, MotionEvent event) {
        // TODO Auto-generated method stub
        /*
        Log.d("Infor", "类别:"+event.getAction());
        Log.d("Infor", "mask:"+event.getActionMasked());
        Log.d("Infor", "index:"+event.getActionIndex());
        Log.d("Infor", "points:"+event.getPointerCount());*/
        Log.d("Infor""size:"+event.getSize());
        if(event.getActionMasked()==MotionEvent.ACTION_POINTER_UP)
            Log.d("Infor""多点操作");
        switch(event.getActionMasked()){
        caseMotionEvent.ACTION_DOWN:
              matrix.set(imgview.getImageMatrix());
              savedMatrix.set(matrix);
              start.set(event.getX(),event.getY());
              Log.d("Infor""触摸了...");
              mode=DRAG;
              break;
        caseMotionEvent.ACTION_POINTER_DOWN:  //多点触控
             oldDist=this.spacing(event);
            if(oldDist>10f){
             Log.d("Infor""oldDist"+oldDist);
             savedMatrix.set(matrix);
             midPoint(mid,event);
             mode=ZOOM;
            }
            break;
        caseMotionEvent.ACTION_POINTER_UP:
            mode=NONE;
            break;
        caseMotionEvent.ACTION_MOVE:
            if(mode==DRAG){         //此实现图片的拖动功能...
                matrix.set(savedMatrix);
                matrix.postTranslate(event.getX()-start.x, event.getY()-start.y);
            }
                elseif(mode==ZOOM){// 此实现图片的缩放功能...
             floatnewDist=spacing(event);
             if(newDist>10){
                 matrix.set(savedMatrix);
                 floatscale=newDist/oldDist;
                 matrix.postScale(scale, scale, mid.x, mid.y);              
             }
                }
            break;
        }
        imgview.setImageMatrix(matrix);
        returnfalse;
    }  
}
Android之关于手势操作图片的缩放与移动

Android之关于手势操作图片的缩放与移动

0 0
原创粉丝点击