图片拖动功能实现

XML文件

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<ImageView  
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:scaleType="matrix"
    android:id="@+id/imageView"
    android:src="@drawable/hd3"
    />
</LinearLayout>

 

主页面:MainActivity.java

 

package com.xiawenquan;

import android.app.Activity;
import android.graphics.Matrix;
import android.graphics.PointF;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;

public class MainActivity extends Activity {
    /** Called when the activity is first created. */
	private ImageView imageView;
	private PointF startPoint = null;
	private Matrix matrix = null;
	private Matrix currMatrix ;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        startPoint = new PointF(); 
        matrix = new Matrix(); // 用于拖拉变换
        currMatrix = new Matrix(); // 用于拖拉变换
        
        
        imageView = (ImageView) findViewById(R.id.imageView);
        imageView.setOnTouchListener(new View.OnTouchListener() {
			
			@Override
			public boolean onTouch(View view, MotionEvent event) {
				switch (event.getAction() & MotionEvent.ACTION_MASK) {
				case MotionEvent.ACTION_DOWN://只有一个手指按下屏幕时触发的事件
					currMatrix.set(matrix); // 保存上一次的移动点
					startPoint.set(event.getX(),event.getY());//移动前,手指按下的位置
					
					
					break;
				case MotionEvent.ACTION_MOVE://手指在屏幕移动时触发的事件,该事件在移动过程不断被触发
					float mX = event.getX() - startPoint.x; // 移动点的X坐标
					float mY = event.getY() - startPoint.y;// 移动点的Y坐标
					matrix.set(currMatrix); // 保存当前变换的点
					matrix.postTranslate(mX, mY); // 移动到指定的点
					
					
					
					
					break;
					
				case MotionEvent.ACTION_POINTER_DOWN://如果已经有一个手指按下屏幕,后续再有手指按下屏幕,就会触发这个事件
					
					break;
					
				case MotionEvent.ACTION_UP://最后一个手指离开屏幕后触发的事件
					
					break;
				case MotionEvent.ACTION_POINTER_UP://有一个手指离开了屏幕,但还有手指在屏幕上,此时会触发该事件
					
					break;

				default:
					break;
				}
				
				imageView.setImageMatrix(matrix); // imageView在移动
				return true;
			}
		});
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值