GestureDetector

用GestureDetector可以处理滑动事件
public GestureDetector (Context context, GestureDetector.OnGestureListener listener)
public GestureDetector (Context context, GestureDetector.OnGestureListener listener, Handler handler)

其中的onGestureListener有
boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) 方法
e1表示开始点,e2表示结束点, velocityX表示X轴方向的分速度, velocityY表示Y方向的分速度
这样 e2.getX() - e1.getX() 就可以表示X轴方向滑动距离, 
通过这些数据就可以判断是否产生了滑动事件,从而进行相应的处理.

想要GestureDetector起作用,需要
1. 给需要响应滑动事件的view注册View.OnTouchListener
2. 在OnTouchListener的onTouch方法中,如下
public boolean onTouch(View arg0, MotionEvent arg1) {
    return detector.onTouchEvent(arg1);    //detector是GestureDetector的实例
}

代码和ViewFlipper的一样

package com.example.howtouseviewflipper;

import android.app.Activity;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;
import android.widget.ViewFlipper;

public class MainActivity extends Activity {

	private ViewFlipper vf;
	private Button btn;
	private String list1[] = {"list1", "1", "2", "3", "4", "5", "6", "7"};
	private String list2[] = {"list2", "lion", "tiger", "monkey", "rabbit", "cat", "dog", "snake", "frog"};
	private String list3[] = {"list3", "red", "yellow", "blue", "green", "purple", "orange", "white", "black", "grey"};
	private GestureDetector gd;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		vf = (ViewFlipper) findViewById(R.id.viewflipper);
		
		ListView lv1 = new ListView(this);
		ArrayAdapter
   
   
    
     aa1 = new ArrayAdapter
    
    
     
     (this, android.R.layout.simple_list_item_1, list1);
		lv1.setAdapter(aa1);
		ListView lv2 = new ListView(this);
		ArrayAdapter
     
     
      
       aa2 = new ArrayAdapter
      
      
       
       (this, android.R.layout.simple_list_item_1, list2);
		lv2.setAdapter(aa2);
		ListView lv3 = new ListView(this);
		ArrayAdapter
       
       
         aa3 = new ArrayAdapter 
        
          (this, android.R.layout.simple_list_item_1, list3); lv3.setAdapter(aa3); View.OnTouchListener vot = new View.OnTouchListener() { @Override public boolean onTouch(View arg0, MotionEvent arg1) { // TODO Auto-generated method stub return gd.onTouchEvent(arg1); } }; AdapterView.OnItemClickListener aaso = new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView 
          arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "OnItemClick "+ arg2, Toast.LENGTH_SHORT).show(); } }; lv1.setOnTouchListener(vot); lv2.setOnTouchListener(vot); lv3.setOnTouchListener(vot); lv1.setOnItemClickListener(aaso); lv2.setOnItemClickListener(aaso); lv3.setOnItemClickListener(aaso); vf.addView(lv1, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); vf.addView(lv2, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); vf.addView(lv3, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); // for(int i = 0; i< list2.length; i++) { // TextView tv = new TextView(this); // tv.setText(list2[i]); // vf.addView(tv, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); // } gd = new GestureDetector(this, new GestureDetector.OnGestureListener() { @Override public boolean onSingleTapUp(MotionEvent arg0) { // TODO Auto-generated method stub return false; } @Override public void onShowPress(MotionEvent arg0) { // TODO Auto-generated method stub } @Override public boolean onScroll(MotionEvent arg0, MotionEvent arg1, float arg2, float arg3) { // TODO Auto-generated method stub return false; } @Override public void onLongPress(MotionEvent arg0) { // TODO Auto-generated method stub } @Override public boolean onFling(MotionEvent arg0, MotionEvent arg1, float arg2, float arg3) { // TODO Auto-generated method stub if(arg1.getX() - arg0.getX() > 120) { vf.showPrevious(); return true; } if(arg1.getX() - arg0.getX() < -120) { vf.showNext(); return true; } return false; } @Override public boolean onDown(MotionEvent arg0) { // TODO Auto-generated method stub return false; } }); btn = (Button)findViewById(R.id.btn); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub if(vf.isFlipping()){ vf.stopFlipping(); btn.setText(R.string.start); }else { vf.startFlipping(); btn.setText(R.string.stop); } } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } // 当ViewFlipper中的view是TextView时,在这个地方用GestureDetector是好用的,但是如果是ListView,就不行了 // @Override // public boolean onTouchEvent(MotionEvent event) { // // TODO Auto-generated method stub // return gd.onTouchEvent(event); // } } 
         
       
      
      
     
     
    
    
   
   


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值