Android 滑动切换页面(记录)

(2012-12-04 16:20:03)


  曾经听到一句经典名言“要想挣钱,就要不要脸;要想持续挣钱,就要持续不要脸”,很现实的一句话,公司中的一个女同事貌似把这一句话运用到了极致。只是好奇,那样活着,心累吗?值得吗?

  左右滑动切换Activity的原理:监控触屏事件和手势事件。在触屏事件处理函数中调用手势事件处理函数,表示用户触屏后是否有手势操作,如果有则进行手势事件处理。

  分四步完成:

  继承OnGestureListener(手势监控器)和OnDoubleTapListener(触屏监听器)

     publicclass ViewSnsActivity extends Activity implementsOnTouchListener,OnGestureListener{}

  添加mGestureDetector的定义,并在ViewSnsActivity的onCreate函数中加入其页面布局的setOnTouchListener事件。

 

GestureDetector mGestureDetector;//手势监听对象
    public void onCreate(Bundle savedInstanceState){
          super.onCreate(savedInstanceState);
         setContentView(R.layout.view_sns_activity);
     
         mGestureDetector= new GestureDetector((OnGestureListener)this);
         LinearLayout viewSnsLayout=(LinearLayout)findViewById(R.id.viewSnsLayout);
         viewSnsLayout.setOnTouchListener(this);
         viewSnsLayout.setLongClickable(true);
    }

  重载onFling函数

   

private int verticalMinDistance=20;
    private int minVelocity=0;
    public boolean onFling(MotionEvent e1,MontionEvent e2,float velocityX, floatvelocityY){
        if(e1.getX()-e2.getX()>verticalMinDistance &&Math.abs(velocityX)>minVelocity)
       //向量的水平长度必须大于verticalMinDistance,并且水平方向速度大于minVelocity 
          {
             //切换Activity
             //Intent intent=new Intent(ViewSnsActivity.this,UpdateStatusActivity.class);
             //startActivity(intent);
            Toast.makeText(this,"向左手势",Toast.LENGTH_SHORT).show();
         }
        else if(e2.getX()-e1.getX()>verticalMinDistance && Math.abs(velocityX)>minVelocity)
        {
           //切换Activity
            Toast.makeText(this,"向右手势",Toast.LENGTH_SHORT).show();
        }
    }

   其中,e1:手势起点的移动事件;e2:当前手势点的移动;velocityX:每秒x轴方向移动的像素;velocityY:每秒y轴方向移动的像素

 

  重载onTouch函数

  调用手势的处理函数

  public boolean onTouch(View v, MotionEvent event){

   return mGestureDetector.onTouchEvent(event);