国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android ListView實現仿iPhone實現左滑刪除按鈕的簡單實例

2019-12-12 05:33:58
字體:
來源:轉載
供稿:網友

需要自定義ListView。這里就交FloatDelListView吧。

復寫onTouchEvent方法。如下:

@Override  public boolean onTouchEvent(MotionEvent ev) {     switch (ev.getAction()) {       case MotionEvent.ACTION_DOWN:<BR>          // 獲取按下的條目視圖(child view)         int childCount = getChildCount();         int[] listViewCoords = new int[2];         getLocationOnScreen(listViewCoords);         int x = (int) ev.getRawX() - listViewCoords[0];         int y = (int) ev.getRawY() - listViewCoords[1];         for (int i = 0; i < childCount; i++) {           downChild = getChildAt(i); //           Rect rect = new Rect();           assert downChild != null;           downChild.getHitRect(rect);            int childPosition = getPositionForView(downChild);            if (rect.contains(x, y)) {             downX = ev.getRawX();             int downPosition = childPosition;              velocityTracker = VelocityTracker.obtain();             assert velocityTracker != null;             velocityTracker.addMovement(ev);             break;           }         }         isSwipe = false;         break;       case MotionEvent.ACTION_MOVE:         velocityTracker.addMovement(ev);<BR>          // 計算水平和垂直方向移動速度         velocityTracker.computeCurrentVelocity(1000);         float velocityX = Math.abs(velocityTracker.getXVelocity());         float velocityY = Math.abs(velocityTracker.getYVelocity()); <BR>          // 水平移動距離         float deltaX = ev.getRawX() - downX;         float deltaMode = Math.abs(deltaX);         if (deltaX > 150) {// right swipe(右滑)           isSwipeToLeft = false;         } else if (deltaX < -150) {// left swipe(左滑)           isSwipeToLeft = true;         }<BR>          // 如果水平滑動距離大于零,并且水平滑動速率比垂直大,說明是水平滑動         if (deltaMode > 0 && velocityY < velocityX) {<BR>            // 這里的FloatDelButtonLayout是自定義的LinearLayout。           ((FloatDelButtonLayout) downChild).showDelButton(ev, isSwipeToLeft);           isSwipe = true;         }         break;       case MotionEvent.ACTION_CANCEL:       case MotionEvent.ACTION_UP:         downChild.setSelected(false);         if (isSwipe) {           isSwipe = false;           return true;         }         break;     }     return super.onTouchEvent(ev);   }

FloatDelButtonLayou.java :

public class FloatDelButtonLayout extends LinearLayout { <BR>   // 提供刪除按鈕的接口   private OnDelListener delListener; <BR>   // 當前視圖在列表中的索引,在delListener中使用   private int index; <BR>   // 右滑 還是 左滑?<BR>  private boolean isSwipeToLeft;<BR>   public void setOnDelListener(OnDelListener listener, int i) {     delListener = listener;     index = i;   }    public FloatDelButtonLayout(Context context) {     super(context, null);   }    public FloatDelButtonLayout(Context context, AttributeSet attrs) {     super(context, attrs, 0);   }    public FloatDelButtonLayout(Context context, AttributeSet attrs, int defStyle) {     super(context, attrs, defStyle);   } <BR>   // 用來顯示或者隱藏刪除按鈕。   public void showDelButton(MotionEvent ev, boolean isSwipeToLeft) {     this.isSwipeToLeft = isSwipeToLeft;     onTouchEvent(ev);   }    private OnClickListener clickDel = new OnClickListener() {     @Override    public void onClick(View v) {       delListener.onDel(index);     }   }; <BR>   /**<BR>    * 這里的event是我們顯示的從FloatDelListView的onTouchEvent里面傳進來的,<BR>   */  @Override  public boolean onTouchEvent(MotionEvent event) {     switch (MotionEventCompat.getActionMasked(event)) {       case MotionEvent.ACTION_MOVE:<BR>          // 獲取刪除按鈕對象,視圖layout中必須要有id為del_button的Button標簽         Button view = (Button) findViewById(R.id.del_button);         view.setText(R.string.del);<BR>          // 設置Button的MarginLayoutParams,當然可以做成各種動作,比如漸隱之類的顯示出來。         MarginLayoutParams layoutParams = (MarginLayoutParams) view.getLayoutParams();         assert layoutParams != null;         if (isSwipeToLeft) {           view.setVisibility(View.VISIBLE);           view.setOnClickListener(clickDel);           layoutParams.leftMargin = -200;         } else {           view.setVisibility(View.GONE);           layoutParams.leftMargin = 0;         }         view.setLayoutParams(layoutParams);         invalidate();         break;     }     return super.onTouchEvent(event);   }    public interface OnDelListener {     void onDel(int i);   } }

以上這篇Android ListView實現仿iPhone實現左滑刪除按鈕的簡單實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 苍梧县| 华亭县| 河曲县| 武汉市| 惠东县| 广昌县| 玉龙| 墨脱县| 洛扎县| 定远县| 崇左市| 洛浦县| 黄大仙区| 商城县| 胶州市| 淳安县| 长沙市| 海原县| 宜宾县| 汽车| 偏关县| 体育| 衡阳县| 涞源县| 平武县| 库尔勒市| 丰镇市| 常宁市| 泾阳县| 山丹县| 富源县| 深泽县| 滦南县| 安顺市| 繁昌县| 阳山县| 安西县| 宜黄县| 密山市| 康保县| 清水县|