多点触摸交互处理,放大缩小

package com.example.multouch;

import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.FrameLayout;
import android.widget.FrameLayout.LayoutParams;
import android.widget.ImageView;
import android.widget.TextView;

public class MainActivity extends Activity {
	private FrameLayout fl;
	private TextView tv1;
	private ImageView iv1;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		fl = (FrameLayout) findViewById(R.id.container);
		tv1 = (TextView) findViewById(R.id.tv1);
		iv1 = (ImageView) findViewById(R.id.iv1);

		// 2.设置事件监听器
		fl.setOnTouchListener(new OnTouchListener() {
			float currentDistance;
			float lastDistance = -1;

			@Override
			public boolean onTouch(View v, MotionEvent event) {
				switch (event.getAction()) {
				case MotionEvent.ACTION_DOWN:
					System.out.println("action down");
					break;
				case MotionEvent.ACTION_MOVE:
					tv1.setText(String.format(
							"x:%f ; y:%f ;触摸点数:" + event.getPointerCount(),
							event.getX(), event.getY()));
					// 获取多个触摸点
					for (int i = 0; i < event.getPointerCount(); i++) {
						System.out.println(String.format("x" + i + ":%f ; y" + i + ":%f ", event.getX(i), event.getY(i)));
						tv1.setText(String.format("x:%f ; y:%f ;触摸点数:" + i,event.getX(i), event.getY(i)));
					}

					// 图片拖动
					FrameLayout.LayoutParams lp = (LayoutParams) iv1.getLayoutParams();
					lp.leftMargin = (int) event.getX();
					lp.topMargin = (int) event.getY();
					iv1.setLayoutParams(lp);
					// 图片放大缩小
					if (event.getPointerCount() >= 2) {
						float offsetX = event.getX(0) - event.getX(1);
						float offsetY = event.getY(0) - event.getY(1);
						currentDistance = (float) Math.sqrt(offsetX * offsetX + offsetY * offsetY);
						if (lastDistance<0) {
							lastDistance = currentDistance;
						}else {
							if (currentDistance - lastDistance >10) {
								System.out.println("fang da"); 
								FrameLayout.LayoutParams lp1 = (LayoutParams) iv1.getLayoutParams();
								lp1.width = (int) (1.1f*iv1.getWidth());
								lp1.height = (int) (1.1f*iv1.getHeight());
								iv1.setLayoutParams(lp1);
								
								lastDistance = currentDistance;
							}else if (lastDistance - currentDistance >10){
								System.out.println("suo xiao");
								
								FrameLayout.LayoutParams lp1 = (LayoutParams) iv1.getLayoutParams();
								lp1.width = (int) (0.9f*iv1.getWidth());
								lp1.height = (int) (0.9f*iv1.getHeight());
								iv1.setLayoutParams(lp1);
								
								lastDistance = currentDistance;
							}
							
						}
					
					}
					break;
				case MotionEvent.ACTION_UP:
					System.out.println("action up");
					break;
				default:
					break;
				}
				return true;
			}
		});

	}
}

/**
 * View.setOnTouchListener(OnTouchListener l) 
 * event.getX() 
 * event.getY()
 * event.getPointerCount() 触摸点个数 event.getX(0) 获取第一个触摸点位置 event.getY(0)
 * 图片的拖动:通过获取 imageView 通过触摸点位置重置imageView
 */


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值