新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > Android手勢學習之單點手勢

        Android手勢學習之單點手勢

        作者: 時間:2016-10-08 來源:網絡 收藏

        04import android.os.Bundle;

        05import android.util.Log;

        06import android.view.GestureDetector;

        07import android.view.GestureDetector.OnGestureListener;

        08import android.view.MotionEvent;

        09import android.view.View;

        10import android.view.View.OnTouchListener;

        11import android.view.animation.AnimationUtils;

        12import android.widget.ImageView;

        13import android.widget.Toast;

        14import android.widget.ViewFlipper;

        15

        16public class SlideAndGestureActivity extends Activity {

        17 private ViewFlipper mFlipper;

        18 private GestureDetector mDetector;

        19 /** Called when the activity is first created. */

        20 @Override

        21 public void onCreate(Bundle savedInstanceState) {

        22 super.onCreate(savedInstanceState);

        23 setContentView(R.layout.slide);

        24

        25 mDetector = new GestureDetector(getApplicationContext(),new FlingListener());

        26 mFlipper = (ViewFlipper )findViewById(R.id.viewFlipper1);

        27

        28 mFlipper.addView(addTextView(R.drawable.one));

        29 mFlipper.addView(addTextView(R.drawable.two));

        30 mFlipper.addView(addTextView(R.drawable.three));

        31 mFlipper.addView(addTextView(R.drawable.four));

        32 mFlipper.addView(addTextView(R.drawable.five));

        33

        34 }

        35

        36 private View addTextView(int resId){

        37 ImageView view = new ImageView(this);

        38 view.setImageResource(resId);

        39 return view;

        40 }

        41

        42 @Override

        43 public boolean onTouchEvent(MotionEvent event) {

        44 return mDetector.onTouchEvent(event);

        45 }

        46

        47 private class FlingListener extends GestureDetector.SimpleOnGestureListener{

        48 @Override

        49 public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,

        50 float velocityY) {

        51 String msg = e1:+e1.getX()+,+e1.getY()+e2:+e2.getX()+,+e2.getY();

        52 Log.i(MotionSlide, msg);

        53 if (e1.getX() - e2.getX() > 120) {

        54 mFlipper.setInAnimation(AnimationUtils.loadAnimation(getApplicationContext(), R.anim.push_left_in));

        55 mFlipper.setOutAnimation(AnimationUtils.loadAnimation(getApplicationContext(), R.anim.push_left_out));

        56 mFlipper.showNext();

        57 return true;

        58 } else if (e1.getX() - e2.getX() -120) {

        59 mFlipper.setInAnimation(AnimationUtils.loadAnimation(getApplicationContext(), R.anim.push_right_in));

        60 mFlipper.setOutAnimation(AnimationUtils.loadAnimation(getApplicationContext(), R.anim.push_right_out));

        61 mFlipper.showPrevious();

        62 return true;

        63 }

        64 return false;

        65 }

        66

        67 }

        68

        69}

        在實際的項目開發中會遇到這樣一樣問題。

        比如。上面 例子添加的ImageView默認也許不處理事件。所以 可以 正常的滑動。

        但是在我的實際的開發中,的發現如ViewFlipper上面有一個GridView,GridView上面排列有Button.然后滑動手勢

        的事件就不會傳播到ViewFlipper中去啊。于是我開始是在GridView上面 設置 一個margin

        在margin區域里滑動事件 就會傳遞給ViwFlipper。(嚴格來說應該是mDetecotor.onTouchEvent()中去。

        然后我就在想這個事件 傳播的問題,然后我想到因為其實主要調用mDetecotor的時候,

        也是在Activity中的OnTouchEvent(MotionEvent)方法 中。

        中將這個MotionEvent事件以這樣return mDetector.onTouchEvent(event)方法處理返回 。

        于是 想在button中事件中的ACTION_MOVE中也調用mDetector.OnTouchEvent()

        但是結果 不行。后來我就不區分ACTION_MOVE等等了。

        于是,最后,我在對button和gridView做了如下處理。

        1button.setOnTouchListener(new OnTouchListener() {

        2 @Override

        3 public boolean onTouch(View v, MotionEvent event) {

        4 return mDetector.onTouchEvent(event);

        5

        6 }

        7});

        1gridView.setOnTouchListener(new OnTouchListener() {

        2 @Override

        3 public boolean onTouch(View v, MotionEvent event) {

        4 return mDetector.onTouchEvent(event);

        5 }

        6});

        我想,因為Fliing這樣事件不僅僅是ACTION_MOVE他還有開始的OnDown等等一系列事件組合起來的。


        上一頁 1 2 下一頁

        關鍵詞:

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 会宁县| 平塘县| 壤塘县| 竹北市| 普宁市| 金寨县| 景洪市| 吴忠市| 化隆| 商都县| 会昌县| 甘孜县| 白银市| 北川| 澎湖县| 怀安县| 徐汇区| 景东| 和平区| 元阳县| 高安市| 铁力市| 沁源县| 襄汾县| 巴塘县| 新兴县| 如皋市| 武定县| 淮阳县| 屏东市| 邹城市| 房产| 福清市| 静宁县| 邳州市| 象州县| 永吉县| 东阿县| 茌平县| 阳泉市| 清镇市|