文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Android仿QQ首页ListView左滑置顶、删除功能

2023-05-30 16:49

关注

 Android 仿QQ首页ListView左滑置顶、删除等实现源码,具体内容如下

效果图

Android仿QQ首页ListView左滑置顶、删除功能

实现源码:package com.duguang.baseanimation.ui.listivew.deletelistview;  
 

import android.content.Context; import android.util.AttributeSet; import android.util.Log; import android.util.TypedValue; import android.view.MotionEvent; import android.view.View; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.Scroller; import android.widget.TextView;  import com.kayak.deletelistview.R;  public class SlideView extends LinearLayout {   private static final String TAG = "SlideView";   private Context mContext;  private LinearLayout mViewContent;  private RelativeLayout mHolder;  private Scroller mScroller;  private OnSlideListener mOnSlideListener;   private int mHolderWidth = 120;   private int mLastX = 0;  private int mLastY = 0;  private static final int TAN = 2;   public interface OnSlideListener {   public static final int SLIDE_STATUS_OFF = 0;   public static final int SLIDE_STATUS_START_SCROLL = 1;   public static final int SLIDE_STATUS_ON = 2;       public void onSlide(View view, int status);  }   public SlideView(Context context) {   super(context);   initView();  }   public SlideView(Context context, AttributeSet attrs) {   super(context, attrs);   initView();  }   private void initView() {   mContext = getContext();   mScroller = new Scroller(mContext);    setOrientation(LinearLayout.HORIZONTAL);   View.inflate(mContext, R.layout.activity_listview_delete_slide_view_merge, this);   mViewContent = (LinearLayout) findViewById(R.id.view_content);   mHolderWidth = Math.round(TypedValue.applyDimension(     TypedValue.COMPLEX_UNIT_DIP, mHolderWidth, getResources()       .getDisplayMetrics()));  }   public void setButtonText(CharSequence text) {   ((TextView)findViewById(R.id.delete)).setText(text);  }   public void setContentView(View view) {   mViewContent.addView(view);  }   public void setOnSlideListener(OnSlideListener onSlideListener) {   mOnSlideListener = onSlideListener;  }   public void shrink() {   if (getScrollX() != 0) {    this.smoothScrollTo(0, 0);   }  }   public void onRequireTouchEvent(MotionEvent event) {   int x = (int) event.getX();   int y = (int) event.getY();   int scrollX = getScrollX();   Log.d(TAG, "x=" + x + " y=" + y);    switch (event.getAction()) {   case MotionEvent.ACTION_DOWN: {    if (!mScroller.isFinished()) {     mScroller.abortAnimation();    }    if (mOnSlideListener != null) {     mOnSlideListener.onSlide(this,       OnSlideListener.SLIDE_STATUS_START_SCROLL);    }    break;   }   case MotionEvent.ACTION_MOVE: {    int deltaX = x - mLastX;    int deltaY = y - mLastY;    if (Math.abs(deltaX) < Math.abs(deltaY) * TAN) {     break;    }     int newScrollX = scrollX - deltaX;    if (deltaX != 0) {     if (newScrollX < 0) {      newScrollX = 0;     } else if (newScrollX > mHolderWidth) {      newScrollX = mHolderWidth;     }     this.scrollTo(newScrollX, 0);    }    break;   }   case MotionEvent.ACTION_UP: {    int newScrollX = 0;    if (scrollX - mHolderWidth * 0.75 > 0) {     newScrollX = mHolderWidth;    }    this.smoothScrollTo(newScrollX, 0);    if (mOnSlideListener != null) {     mOnSlideListener.onSlide(this,       newScrollX == 0 ? OnSlideListener.SLIDE_STATUS_OFF         : OnSlideListener.SLIDE_STATUS_ON);    }    break;   }   default:    break;   }    mLastX = x;   mLastY = y;  }   private void smoothScrollTo(int destX, int destY) {   // 缓慢滚动到指定位置   int scrollX = getScrollX();   int delta = destX - scrollX;   mScroller.startScroll(scrollX, 0, delta, 0, Math.abs(delta) * 3);   invalidate();  }   @Override  public void computeScroll() {   if (mScroller.computeScrollOffset()) {    scrollTo(mScroller.getCurrX(), mScroller.getCurrY());    postInvalidate();   }  }  } 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 资料下载
  • 历年真题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯