OnTouch的简单例子

个人比较健忘,所以前段时间趁空整理了一些简单的demo,以后用着方便。

OnTouch顾名思义就是触摸屏幕事件,各问题代码里解释很详细啦。代码大部分是从网络获取的。

import android.os.Bundle;
import android.app.Activity;
import android.graphics.PointF;
import android.util.Log;
import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.TextView;
/**
 * OnTouch的简单应用
 * @author 枫jk
 *
 */
public class MainActivity extends Activity implements OnTouchListener,OnGestureListener {

	PointF startPoint;
	GestureDetector mGestureDetector;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		startPoint=new PointF();
		mGestureDetector=new GestureDetector(this);
		TextView tv=(TextView) findViewById(R.id.tv_1);
		tv.setClickable(true);		//不设置这个无法响应ACTION_UP  ACTION_MOVE  等事件
		tv.setOnTouchListener(this);
	}


	/*
	 * 
	 * event.getAction() //获取触控动作比如ACTION_DOWN
  		event.getPointerCount(); //获取触控点的数量,比如2则可能是两个手指同时按压屏幕
  event.getPointerId(nID); //对于每个触控的点的细节,我们可以通过一个循环执行getPointerId方法获取索引
  event.getX(nID); //获取第nID个触控点的x位置
  event.getY(nID); //获取第nID个点触控的y位置
  event.getPressure(nID); //LCD可以感应出用户的手指压力,当然具体的级别由驱动和物理硬件决定的
  event.getDownTime() //按下开始时间
  event.getEventTime() // 事件结束时间
  event.getEventTime()-event.getDownTime()); //总共按下时花费时间
	 */
	@Override
	public boolean onTouch(View v, MotionEvent event) {
		// TODO Auto-generated method stub
//		Log.e("onTouch  x y", event.getX()+"  "+event.getY());	//触摸点相对于控件的X、Y距离
//		Log.e("onTouch rawX rawY", event.getRawX()+"  "+event.getRawY());  	//触摸点相对于屏幕的X、Y距离
//		switch(event.getAction()& MotionEvent.ACTION_MASK){   ACTION_MASK在Android中是应用于多点触摸操作
//		switch(event.getAction()){
//		case MotionEvent.ACTION_DOWN:
//			Log.e("ACTION_DOWN  x y", event.getX()+"  "+event.getY());
//			startPoint.set(event.getX(), event.getY());
//			break;
//		case MotionEvent.ACTION_UP:
//			Log.e("ACTION_UP  x y", event.getX()+"  "+event.getY());
//			break;
//		case MotionEvent.ACTION_MOVE:
//			Log.e("ACTION_MOVE  x y", (event.getX()-startPoint.x)+"  "+(event.getY()-startPoint.y));
//			break;
//		case MotionEvent.ACTION_CANCEL:
//			Log.e("ACTION_CANCEL  x y", event.getX()+"  "+event.getY());
//			break;
//		}
//		return false;
		
		return mGestureDetector.onTouchEvent(event);
		
	}

	//用户轻触触摸屏,由1个MotionEvent ACTION_DOWN触发
	@Override
	public boolean onDown(MotionEvent event) {
		// TODO Auto-generated method stub
		Log.e("onDown  x y", event.getX()+"  "+event.getY());
		return false;
	}

	// 用户按下触摸屏、快速移动后松开,由1个MotionEvent ACTION_DOWN, 多个ACTION_MOVE, 1个ACTION_UP触发
	// 参数解释:   
	// event0:第1个ACTION_DOWN MotionEvent   
	// event1:最后一个ACTION_MOVE MotionEvent   
	// velocityX:X轴上的移动速度,像素/秒   
	// velocityY:Y轴上的移动速度,像素/秒
	@Override
	public boolean onFling(MotionEvent event0, MotionEvent event1, float velocityX,    float velocityY) {
		// TODO Auto-generated method stub
//		Log.e("onFling event0 x y", event0.getX()+"  "+event0.getY());
//		Log.e("onFling event1  x y", event1.getX()+"  "+event1.getY());
//		Log.e("onFling  x y", velocityX+"  "+velocityY);
		if(Math.abs(event0.getX()-event1.getX())>100){
			Log.e("onFling  x y", velocityX+"  "+velocityY);
		}
		return false;
	}

	// 用户长按触摸屏,由多个MotionEvent ACTION_DOWN触发
	@Override
	public void onLongPress(MotionEvent event0) {
		// TODO Auto-generated method stub
		Log.e("onLongPress  x y", event0.getX()+"  "+event0.getY());
	}

	// 用户按下触摸屏,并拖动,由1个MotionEvent ACTION_DOWN, 多个ACTION_MOVE触发
	@Override
	public boolean onScroll(MotionEvent event0, MotionEvent event1, float distanceX, float distanceY) {
		// TODO Auto-generated method stub
//		Log.e("onScroll event0  x y", event0.getX()+"  "+event0.getY());
//		Log.e("onScroll event1  x y", event1.getX()+"  "+event1.getY());
//		Log.e("onScroll   x y", distanceX+"  "+distanceY);
		if(Math.abs(event0.getX()-event1.getX())>100){
			Log.e("onScroll  x y", distanceX+"  "+distanceY);
		}
		return false;
	}

	// 用户轻触触摸屏,尚未松开或拖动,由一个1个MotionEvent ACTION_DOWN触发   
	// 注意和onDown()的区别,强调的是没有松开或者拖动的状态
	@Override
	public void onShowPress(MotionEvent event0) {
		// TODO Auto-generated method stub
		Log.e("onShowPress  x y", event0.getX()+"  "+event0.getY());
	}

	// 用户(轻触触摸屏后)松开,由一个1个MotionEvent ACTION_UP触发
	@Override
	public boolean onSingleTapUp(MotionEvent event0) {
		// TODO Auto-generated method stub
		Log.e("onSingleTapUp  x y", event0.getX()+"  "+event0.getY());
		return false;
	}

}



源码地址:http://download.csdn.net/detail/han123456o/7137311


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值