a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 系統 > Android > 正文

Android提高之多方向抽屜實現方法

2020-04-11 11:45:38
字體:
來源:轉載
供稿:網友

說起在android上要實現類似Launch的抽屜效果,大家一定首先會想起SlidingDrawer。SlidingDrawer是android官方控件之一,但是本文的主角并不是它,而是民間的控件工具集合:android-misc-widgets。android-misc-widgets里面包含幾個widget:Panel、SmoothButton、Switcher、VirtualKeyboard,還有一些動畫特效,本文主要介紹抽屜容器Panel的用法。android-misc-widgets的google工程地址:-widgets/http://code.google.com/p/android-misc。

工程代碼中Panel的演示效果如下所示:

這個Panel控件可以輕易實現不同方向的抽屜效果,比SlidingDrawer有更強的擴展性!

在多次使用Panel的過程中,發現Panel有個bug,會間斷性出現“閃爍”,也就是在onTouchListener里面的觸發ACTION_DOWN后,抽屜瞬間彈出然后瞬間回收(版本日期為Feb 3, 2009)。把原Panel的OnTouchListener加以替換,即以下代碼:

OnTouchListener touchListener = new OnTouchListener() { int initX; int initY; boolean setInitialPosition; public boolean onTouch(View v, MotionEvent event) { if (mState == State.ANIMATING) {  // we are animating  return false; }//  Log.d(TAG, "state: " + mState + " x: " + event.getX() + " y: " + event.getY()); int action = event.getAction(); if (action == MotionEvent.ACTION_DOWN) {  if (mBringToFront) {  bringToFront();  }  initX = 0;  initY = 0;  if (mContent.getVisibility() == GONE) {  // since we may not know content dimensions we use factors here  if (mOrientation == VERTICAL) {   initY = mPosition == TOP? -1 : 1;  } else {   initX = mPosition == LEFT? -1 : 1;  }  }  setInitialPosition = true; } else {  if (setInitialPosition) {  // now we know content dimensions, so we multiply factors...  initX *= mContentWidth;  initY *= mContentHeight;  // ... and set initial panel's position  mGestureListener.setScroll(initX, initY);  setInitialPosition = false;  // for offsetLocation we have to invert values  initX = -initX;  initY = -initY;  }  // offset every ACTION_MOVE & ACTION_UP event   event.offsetLocation(initX, initY); } if (!mGestureDetector.onTouchEvent(event)) {  if (action == MotionEvent.ACTION_UP) {  // tup up after scrolling  post(startAnimation);  } } return false; }};

替換為:

OnTouchListener touchListener = new OnTouchListener() { float touchX, touchY; public boolean onTouch(View v, MotionEvent event) { if (mState == State.ANIMATING) {  // we are animating  return false; } int action = event.getAction(); if (action == MotionEvent.ACTION_DOWN) {  if (mBringToFront) {  bringToFront();  }  touchX = event.getX();  touchY = event.getY(); } if (!mGestureDetector.onTouchEvent(event)) {  if (action == MotionEvent.ACTION_UP) {  // tup up after scrolling  int size = (int) (Math.abs(touchX - event.getX()) + Math   .abs(touchY - event.getY()));  if (size == mContentWidth || size == mContentHeight) {   mState = State.ABOUT_TO_ANIMATE;   //Log.e("size", String.valueOf(size));   //Log.e(String.valueOf(mContentWidth),String.valueOf(mContentHeight));  }  post(startAnimation);  } } return false; }};

即可修復這個bug,并且也同樣實現了OnClickListener的功能,可以把原Panel的OnClickListener給刪掉了!

希望本文所述實例對于大家進行Android項目開發能有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 欧美一区二区三区黄 | 国产成人精品一区二 | 一区二区三区久久 | 精品福利一区二区三区 | 日韩毛片免费视频一级特黄 | 色屁屁草草影院ccyycom | 一区二区三区四区日韩 | 激情99 | 国产在线第一页 | 天天干狠狠干 | 国产精品久久久久久久久免费软件 | 久久久久久久一区 | av久久 | 午夜精品久久久久久久蜜桃app | 日本综合久久 | 99re热精品视频 | 亚洲偷色| 日本爽快片毛片 | 国产一级淫片91aaa | 日韩在线二区 | 亚洲综合色自拍一区 | 久久人人超碰 | 老司机精品福利视频 | 国产成人久久 | 99re6在线| 国产精品粉嫩白浆在线观看 | 国产精品人人做人人爽 | 欧美一区二区三区在线视频 | 欧美成人一区二区三区片免费 | 久久久91精品国产一区二区 | 青青草视频在线免费观看 | 黄色在线 | 一级久久久 | 久久草在线视频 | 狠狠干夜夜操 | 日韩三级电影在线免费观看 | 国产精品久久国产精品 | 一区二区免费在线播放 | 欧美在线一区二区三区 | 在线视频91 | 国产成人精品一区二区三区四区 |