对于Android 的手势不光在软件中会经常用到,比如浏览器中的翻页,滚动页面等等;当然其实在我们开发Android游戏的时候加上了Android手势操作更会让游戏增加一个亮点,比如一般的CAG ,PUZ等类型的游戏选择关卡啦、简单背景的移动啦,都可以使用手势来操作即可,类似前段时间很火的《让人愤怒的小鸟!》咳咳、不好意思说错了,是《愤怒的小鸟》,因为总是听群里啊,朋友啊说小鸟出新版本啦,小鸟出PC硬盘版啦! 唉~你说可让人愤怒,其实说实话,小鸟这个游戏确实不错,我所看到的唯一的亮点是这款游戏的创意!说实话,现在的游戏没有做不出来的只有想不出来的好创意、咳咳。回到话题来,那么下面我们来稍微了解下什么是Android 手势!
   所谓手势操作,类似跳舞机、EZdancer~这些利用不同动作和音符让人手舞足蹈一样,那么Android这里的手势只是让我们在游戏和软件中的操作有了更多的花样和玩法,根据玩家接触屏幕时间的长短,在屏幕上滑动的距离,按下抬起的时间等进行了包装,其实就是Android 对触屏处理做了包装和处理。


多时候,利用触摸屏的Fling、Scroll等Gesture(手势)操作来操作会使得应用程序 的用户体验大大提升,比如用Scroll手势在 浏览器中滚屏,用Fling在阅读器中翻页等。在Android 系 统中,手势的识别是通过 GestureDetector.OnGestureListener接口来实现的,不过William翻遍了Android的官方文档也没有找到一个相 关的例子,API Demo中的TouchPaint也仅仅是提到了onTouch事件的处理,没有涉及到手势。Android Developer讨论组里也有不少人有和我类似的问题,结合他们提到的方法和我所做的实验,我将给大家简单讲述一下Android中手势识别的实现

 

下面我讲解一个实例来说明Gesture手势操作。

 

      private  ViewFlipper flipper;

      private GestureDetector  detector;

      detector = new GestureDetector(this);// 


       detector.setIsLongpressEnabled(true);

        flipper = new ViewFlipper(this);

 

       flipper.setBackgroundColor(Color.WHITE);
        flipper.addView(addTextView("第一美女", 0));//
        flipper.addView(addTextView("第二美女", 1));
        flipper.addView(addTextView("第三美女", 2));
        flipper.addView(addTextView("第四美女", 3));
        flipper.addView(addTextView("第五美女", 4));
        flipper.addView(addTextView("第六美女", 5));
        flipper.addView(addTextView("第七美女", 6));//
        flipper.addView(addTextView("第八美女", 7));
        flipper.addView(addTextView("第九美女", 8));
        flipper.addView(addTextView("第十美女", 9));
        setContentView(flipper);

 

 

而addTextView方法的实现细节如下所示:

private View addTextView(String text, int i) {
        TextView tv = new TextView(this);
        tv.setText(text);
        tv.setGravity(1);
        LinearLayout output = new LinearLayout(this);
        output.setOrientation(LinearLayout.VERTICAL);
        Drawable dabg;
        switch (i) {
        case 0:
            dabg = this.getResources().getDrawable(R.drawable.a1);
            output.setBackgroundDrawable(dabg);
            break;
        case 1:
            dabg = this.getResources().getDrawable(R.drawable.a2);
            output.setBackgroundDrawable(dabg);
            break;
        case 2:
            dabg = this.getResources().getDrawable(R.drawable.a3);
            output.setBackgroundDrawable(dabg);
            break;
        case 3:
            dabg = this.getResources().getDrawable(R.drawable.a4);
            output.setBackgroundDrawable(dabg);
            break;
        case 4:
            dabg = this.getResources().getDrawable(R.drawable.a5);
            output.setBackgroundDrawable(dabg);
            break;
        case 5:
            dabg = this.getResources().getDrawable(R.drawable.a6);
            output.setBackgroundDrawable(dabg);
            break;
           
        case 6:
            dabg = this.getResources().getDrawable(R.drawable.a7);
            output.setBackgroundDrawable(dabg);
            break;
        case 7:
            dabg = this.getResources().getDrawable(R.drawable.a8);
            output.setBackgroundDrawable(dabg);
            break;
        case 8:
            dabg = this.getResources().getDrawable(R.drawable.a9);
            output.setBackgroundDrawable(dabg);
            break;
        case 9:
            dabg = this.getResources().getDrawable(R.drawable.a10);
            output.setBackgroundDrawable(dabg);
            break;
       
       

        }
        output.addView(tv);
        return output;
    }

将图片添加到ViewFlipper对象中了。然后要通过手势操作切换图片

 

@Override
    public boolean onTouchEvent(MotionEvent event) {
        // TODO Auto-generated method stub
        return this.detector.onTouchEvent(event);
    }
@Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
            float velocityY) {
        // TODO Auto-generated method stub
        if (e1.getX() - e2.getX() > 120) {
            this.flipper.setInAnimation(AnimationUtils.loadAnimation(this,
                    R.drawable.left_in));
            this.flipper.setOutAnimation(AnimationUtils.loadAnimation(this,
                    R.drawable.left_out));
            this.flipper.showNext();
            return true;
        } else if (e1.getX() - e2.getX() < -120) {
            this.flipper.setInAnimation(AnimationUtils.loadAnimation(this,
                    R.drawable.right_in));
            this.flipper.setOutAnimation(AnimationUtils.loadAnimation(this,
                    R.drawable.right_out));
            this.flipper.showPrevious();
            return true;
        } else if (e1.getY() - e2.getY() > 200) {
            this.flipper.setInAnimation(AnimationUtils.loadAnimation(this,
                    R.drawable.push_up_in));
            this.flipper.setOutAnimation(AnimationUtils.loadAnimation(this,
                    R.drawable.push_up_out));
            this.flipper.showNext();
            return true;
        } else if (e1.getY() - e2.getY() < -200) {
            this.flipper.setInAnimation(AnimationUtils.loadAnimation(this,
                    R.drawable.push_down_in));
            this.flipper.setOutAnimation(AnimationUtils.loadAnimation(this,
                    R.drawable.push_down_out));
            this.flipper.showPrevious();
            return true;
        }
        return false;
    }

 

 

重写两个事件,一个是onTouchEvent函数,一个是onFling函数

 

这样就可以实现翻页效果了。

 

如果想要实现幻灯片效果的话,就是自定实现图片切换。可以使用Thread ,Runable,Handler来实现之

 

 private Handler handler;
 private Runnable runnable ;

 

 runnable = new Runnable(){
            int i = 0;
            @Override
            public void run() {
                // TODO Auto-generated method stub
               
                //Message对象由android系统提供
                Message msg = handler.obtainMessage();
                //将msg对象arg1成员变量设置为i;
                msg.arg1 = i;
                i++;
                try{
                    Thread.sleep(5000);
                }catch(InterruptedException e ){
                    e.printStackTrace();
                }
                handler.sendMessage(msg);
                if(i == 11){
                    i = 0;
                }
               
            }
           
           
        };
       
       
       
        handler = new Handler(){

            @Override
            public void handleMessage(Message msg) {
                // TODO Auto-generated method stub
                super.handleMessage(msg);
                switch(msg.arg1){
               
                case 1:
                case 2:
                case 3:           
                case 4:
                case 5:
                case 6:   
                case 7:
                case 8:
                case 9:   
                case 10:
                    flipper.setInAnimation(AnimationUtils.loadAnimation(MainActivity.this,
                            R.drawable.left_in));
                    flipper.setOutAnimation(AnimationUtils.loadAnimation(MainActivity.this,
                            R.drawable.left_out));
                    flipper.showNext();
                    break;
                   
                }
                handler.post(runnable);
            }
           
           
        };

 

 

通过    handler.post(runnable);
                //open the state

触发

 

而动画效果:

left_in.xml

<?xml version="1.0" encoding="utf-8"?>

            android:toXDelta="0"
        android:duration="500" />

left_out.xml

 

<?xml version="1.0" encoding="utf-8"?>

            android:duration="500" />

 

 

还有其他的事件

@Override
    public boolean onDown(MotionEvent e) {
        // TODO Auto-generated method stub
        return false;
    }
@Override
    public void onLongPress(MotionEvent e) {
        // TODO Auto-generated method stub
       
    }

    @Override
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
            float distanceY) {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public void onShowPress(MotionEvent e) {
        // TODO Auto-generated method stub
       
    }

    @Override
    public boolean onSingleTapUp(MotionEvent e) {
        // TODO Auto-generated method stub
        return false;
    }

更多相关文章

  1. android JNI C代码对sdcard中文件的操作
  2. android 自定义线程,自动结束本身线程
  3. Android(安卓)6.0 移除HttpClient
  4. Android中的高效率的数据库操作框架----LitePal
  5. Android(安卓)实现Http get 和post操作
  6. Android中的GalleryView实例演示-周末福利有美女图
  7. Android(安卓)SQLITE 操作工具类
  8. Android:BroadcastReceiver 随记
  9. Android(安卓)中如何复制文件的操作

随机推荐

  1. Android中个人推崇的数据库使用方式
  2. Android(安卓)- 系统应用源码开发入门
  3. [Android]如何做一个崩溃率少于千分之三
  4. android 随着认识的去除率EditText(它配备
  5. android 完整地操作数据库--日记本实例
  6. Android屏幕锁屏弹窗的正确姿势DEMO详解
  7. Android用户界面开发:事件处理
  8. Android之四大组件(Service的开启与关闭)
  9. Android(安卓)Studio那些让我感觉到爽的
  10. LRC歌词原理和实现高仿Android网易云音乐