zoukankan      html  css  js  c++  java
  • android gesture 手势

      这个例子是用手势实现翻页效果,相当酷,个人觉得比gallery漂亮,可以用于广告场合。思路:把Activity的TouchEvent交给GestureDetector处理。

    这个程序使用了ViewFlipper组件,其实这个组件就是容器组件,可以调用addView(View v)添加多个组件,然后就可以用ViewFlipper使用动画控制多个组件之间的切换效果

    首先第一步是布局main.xml文件

    View Code
     1 <?xml version="1.0" encoding="utf-8"?>
    2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3 android:orientation="vertical"
    4 android:layout_width="fill_parent"
    5 android:layout_height="fill_parent"
    6 >
    7 <ViewFlipper
    8 android:id="@+id/flipper"
    9 android:layout_width="wrap_content"
    10 android:layout_height="120dp"/>
    11 </LinearLayout>

    第二步:添加照片和在res文件夹下建立一个anim文件,里面放四个动画xml文件,分别为left_in.xml,left_out.xml,right_in.xml.right_out.xml

    View Code
     1 <?xml version="1.0" encoding="utf-8"?>
    2 <!-- 左边的进来left_in -->
    3 <set
    4 xmlns:android="http://schemas.android.com/apk/res/android">
    5 <translate
    6 android:fromXDelta="100%p"
    7 android:toXDelta="0"
    8 android:duration="500" />
    9 <alpha
    10 android:fromAlpha="0.0"
    11 android:toAlpha="1.0"
    12 android:duration="500" />
    13 </set>
    14
    15
    16 <?xml version="1.0" encoding="utf-8"?>
    17 <!-- 左边的出去left_out -->
    18 <set
    19 xmlns:android="http://schemas.android.com/apk/res/android">
    20 <translate
    21 android:fromXDelta="0"
    22 android:toXDelta="-100%p"
    23 android:duration="500" />
    24 <alpha
    25 android:fromAlpha="1.0"
    26 android:toAlpha="0.0"
    27 android:duration="500" />
    28 </set>
    29
    30 <?xml version="1.0" encoding="utf-8"?>
    31 <!-- 右边的出去left_in -->
    32 <set
    33 xmlns:android="http://schemas.android.com/apk/res/android">
    34 <translate
    35 android:fromXDelta="-100%p"
    36 android:toXDelta="0"
    37 android:duration="500" />
    38 <alpha
    39 android:fromAlpha="0.0"
    40 android:toAlpha="1.0"
    41 android:duration="500" />
    42 </set>
    43
    44 <?xml version="1.0" encoding="utf-8"?>
    45 <!-- 右边的出去left_out -->
    46 <set
    47 xmlns:android="http://schemas.android.com/apk/res/android">
    48 <translate
    49 android:fromXDelta="0"
    50 android:toXDelta="100%p"
    51 android:duration="500" />
    52 <alpha
    53 android:fromAlpha="1.0"
    54 android:toAlpha="0.0"
    55 android:duration="500" />
    56 </set>

    第三步:编写GestureActivity.java文件

    View Code
      1 package cn.shaoyangjiang.com;
    2
    3 import android.app.Activity;
    4 import android.os.Bundle;
    5 import android.view.GestureDetector;
    6 import android.view.GestureDetector.OnGestureListener;
    7 import android.view.MotionEvent;
    8 import android.view.View;
    9 import android.view.animation.Animation;
    10 import android.view.animation.AnimationUtils;
    11 import android.widget.ImageView;
    12 import android.widget.ViewFlipper;
    13
    14 public class GestureActivity extends Activity implements OnGestureListener{
    15 // ViewFlipper实例
    16 ViewFlipper flipper;
    17 // 定义手势检测器实例
    18 GestureDetector detector;
    19 //定义一个动画数组,用于为ViewFlipper指定切换动画效果
    20 Animation[] animations = new Animation[4];
    21 //定义手势动作两点之间的最小距离
    22 final int FLIP_DISTANCE = 50;
    23 @Override
    24 public void onCreate(Bundle savedInstanceState) {
    25 super.onCreate(savedInstanceState);
    26 setContentView(R.layout.main);
    27 //创建手势检测器
    28 detector = new GestureDetector(this);
    29 // 获得ViewFlipper实例
    30 flipper = (ViewFlipper)findViewById(R.id.flipper);
    31 // 为ViewFlipper添加5个ImageView组件
    32 flipper.addView(addImageView(R.drawable.katong));
    33 flipper.addView(addImageView(R.drawable.meinv));
    34 flipper.addView(addImageView(R.drawable.shan));
    35 flipper.addView(addImageView(R.drawable.tian));
    36 flipper.addView(addImageView(R.drawable.touming));
    37 //初始化Animation数组
    38 animations[0] = AnimationUtils.loadAnimation(this,R.anim.left_in);
    39 animations[1] = AnimationUtils.loadAnimation(this,R.anim.left_out);
    40 animations[2] = AnimationUtils.loadAnimation(this,R.anim.right_in);
    41 animations[3] = AnimationUtils.loadAnimation(this,R.anim.right_in);
    42
    43 }
    44 // 定义添加ImageView的工具方法
    45 private View addImageView(int resId){
    46 ImageView imageView = new ImageView(this);
    47 imageView.setImageResource(resId);
    48 imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
    49 return imageView;
    50 }
    51
    52 @Override
    53 public boolean onDown(MotionEvent arg0) {
    54 // TODO Auto-generated method stub
    55 return false;
    56 }
    57 @Override
    58 public boolean onFling(MotionEvent event1, MotionEvent event2, float velocityX,
    59 float velocityY) {
    60 /*
    61 * 如果第一个触点事件的X座标大于第二个触点事件的X座标超过FLIP_DISTANCE
    62 * 也就是手势从右向左滑。
    63 */
    64 if (event1.getX() - event2.getX() > FLIP_DISTANCE)
    65 {
    66 // 为flipper设置切换的的动画效果
    67 flipper.setInAnimation(animations[0]);
    68 flipper.setOutAnimation(animations[1]);
    69 flipper.showPrevious();
    70 return true;
    71 }
    72 /*
    73 * 如果第二个触点事件的X座标大于第一个触点事件的X座标超过FLIP_DISTANCE
    74 * 也就是手势从右向左滑。
    75 */
    76 else if (event2.getX() - event1.getX() > FLIP_DISTANCE)
    77 {
    78 // 为flipper设置切换的的动画效果
    79 flipper.setInAnimation(animations[2]);
    80 flipper.setOutAnimation(animations[3]);
    81 flipper.showNext();
    82 return true;
    83 }
    84 return false;
    85 }
    86 @Override
    87 public void onLongPress(MotionEvent event) {
    88
    89 }
    90 @Override
    91 public boolean onScroll(MotionEvent arg0, MotionEvent arg1, float arg2,
    92 float arg3) {
    93 return false;
    94 }
    95 @Override
    96 public void onShowPress(MotionEvent arg0) {
    97
    98 }
    99 @Override
    100 public boolean onSingleTapUp(MotionEvent event) {
    101 return false;
    102 }
    103
    104 @Override
    105 public boolean onTouchEvent(MotionEvent event) {
    106 //将该Activity上的触碰事件交给GestureDetector处理
    107 return detector.onTouchEvent(event);
    108 }
    109 }

    效果图:




  • 相关阅读:
    UOJ#80. 二分图最大权匹配 模板
    BZOJ2243: [SDOI2011]染色
    LA5713 Qin Shi Huang's National Road System
    BZOJ1977: [BeiJing2010组队]次小生成树 Tree
    LA5009 Error Curves
    BZOJ1013: [JSOI2008]球形空间产生器sphere
    BZOJ2733: [HNOI2012]永无乡
    BZOJ1552: [Cerc2007]robotic sort
    BZOJ3223: Tyvj 1729 文艺平衡树
    网络流24题(24/24)
  • 原文地址:https://www.cnblogs.com/shaoyangjiang/p/2373565.html
Copyright © 2011-2022 走看看