android 下拉重新整理上拉載入更多,高仿ios左滑動刪除item,解決了眾多手勢問題

來源:互聯網
上載者:User

android 下拉重新整理上拉載入更多,高仿ios左滑動刪除item,解決了眾多手勢問題

一、前言

老規矩,別的不說,這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();    }    @Override    public void computeScroll() {        if (mScroller.computeScrollOffset()) {        System.out.println(當前x位置:+mScroller.getCurrX());        System.out.println(當前Y位置:+mScroller.getCurrY());            scrollTo(mScroller.getCurrX(), mScroller.getCurrY());            postInvalidate();        }    }}

三、直接源碼下載了:最近總結一下,csdn在我看來最近沒有那麼活躍了,真正的大牛已經很少在csdn發微博了,都去了github、stackoverflow、eoe等網站了!哎,逼於無奈我後期也得轉移陣地了!

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.