首页 > 系统 > Android > 正文

Android下拉刷新上拉加载更多左滑动删除

2020-04-11 11:01:22
字体:
来源:转载
供稿:网友

一、前言

老规矩,别的不说,这demo是找了很相关知识集合而成的,可以说对我这种小白来说是绞尽脑汁!程序员讲的是无图无真相!

现在大家一睹为快!

二、比较关键的还是scroller这个类的

package com.icq.slideview.view;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.icq.slideview.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;/*** @param view current SlideView* @param status SLIDE_STATUS_ON or SLIDE_STATUS_OFF*/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.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: {int deltaX = x - mLastX;System.out.println(按下偏移+deltaX);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;System.out.println(偏移+deltaX);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;System.out.println(偏移scrollX+scrollX);System.out.println(偏移差delta+delta);int a= Math.abs(delta) * 3;System.out.println(什么意思+a);mScroller.startScroll(scrollX, 0, delta, 0, Math.abs(delta) * 3);invalidate();}@Overridepublic void computeScroll() {if (mScroller.computeScrollOffset()) {System.out.println(当前x位置:+mScroller.getCurrX());System.out.println(当前Y位置:+mScroller.getCurrY());scrollTo(mScroller.getCurrX(), mScroller.getCurrY());postInvalidate();}}}

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表