Android下拉刷新上拉加載更多左滑動刪除
一、前言
老規(guī)矩,別的不說,這demo是找了很相關(guān)知識集合而成的,可以說對我這種小白來說是絞盡腦汁!程序員講的是無圖無真相!
現(xiàn)在大家一睹為快!
二、比較關(guān)鍵的還是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(); } } }
- Android實現(xiàn)左滑刪除列表功能
- Android仿QQ首頁ListView左滑置頂、刪除功能
- Android使用CardView作為RecyclerView的Item并實現(xiàn)拖拽和左滑刪除
- Android 實現(xiàn)左滑出現(xiàn)刪除選項
- Android仿QQ列表左滑刪除操作
- Android仿QQ左滑刪除置頂ListView操作
- Android使用PullToRefresh完成ListView下拉刷新和左滑刪除功能
- Android ListView實現(xiàn)仿iPhone實現(xiàn)左滑刪除按鈕的簡單實例
- Android自定義組合控件之自定義下拉刷新和左滑刪除實例代碼
- Android仿微信實現(xiàn)左滑顯示刪除按鈕功能
相關(guān)文章
Android ConnectivityManager網(wǎng)絡管理詳解
在android平臺中ConnectivityManager主要負責查詢網(wǎng)絡連接狀態(tài)以及在連接狀態(tài)有變化的時候發(fā)出通知,這篇文章主要介紹了Android ConnectivityManager網(wǎng)絡管理2022-11-11Android檢測Activity或者Service是否運行的方法
下面小編就為大家分享一篇Android檢測Activity或者Service是否運行的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-03-03詳解Android應用main函數(shù)的調(diào)用
Android常識,App主線程初始化了Looper,調(diào)用prepare的地方是ActivityThread.main函數(shù)。問題來了,App的main函數(shù)在哪兒調(diào)用,下面我們來一起學習一下吧2019-06-06Android Shape屬性創(chuàng)建環(huán)形進度條
這篇文章主要介紹了Android Shape屬性創(chuàng)建環(huán)形進度條的實例代碼,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2019-11-11Android仿拉手網(wǎng)團購App產(chǎn)品詳情界面效果
這篇文章主要介紹了Android仿拉手網(wǎng)團購App產(chǎn)品詳情界面效果,代碼簡單易懂,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-05-05Android Flutter實現(xiàn)3D動畫效果示例詳解
在Flutter中提供了AnimatedWidget組件用于構(gòu)建可復用的動畫組件。本文我們用AnimatedWidget來實現(xiàn)組件的3D旋轉(zhuǎn)效果,感興趣的可以了解一下2022-03-03Android編程使用ListView實現(xiàn)數(shù)據(jù)列表顯示的方法
這篇文章主要介紹了Android編程使用ListView實現(xiàn)數(shù)據(jù)列表顯示的方法,實例分析了Android中ListView控件的使用技巧,需要的朋友可以參考下2016-01-01Android Studio 下 Flutter 開發(fā)環(huán)境搭建過程
這篇文章主要介紹了Android Studio 下 Flutter 開發(fā)環(huán)境搭建/Flutter / Dart 插件安裝 | Flutter SDK 安裝 | 環(huán)境變量配置 | 開發(fā)環(huán)境檢查,本文圖文并茂給大家介紹的非常詳細,需要的朋友可以參考下2020-03-03