Android下拉刷新上拉加載更多左滑動(dòng)刪除
一、前言
老規(guī)矩,別的不說,這demo是找了很相關(guān)知識(shí)集合而成的,可以說對(duì)我這種小白來說是絞盡腦汁!程序員講的是無圖無真相!
現(xiàn)在大家一睹為快!


二、比較關(guān)鍵的還是scroller這個(gè)類的
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) {
// 緩慢滾動(dòng)到指定位置
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(當(dāng)前x位置:+mScroller.getCurrX());
System.out.println(當(dāng)前Y位置:+mScroller.getCurrY());
scrollTo(mScroller.getCurrX(), mScroller.getCurrY());
postInvalidate();
}
}
}
- Android實(shí)現(xiàn)左滑刪除列表功能
- Android仿QQ首頁ListView左滑置頂、刪除功能
- Android使用CardView作為RecyclerView的Item并實(shí)現(xiàn)拖拽和左滑刪除
- Android 實(shí)現(xiàn)左滑出現(xiàn)刪除選項(xiàng)
- Android仿QQ列表左滑刪除操作
- Android仿QQ左滑刪除置頂ListView操作
- Android使用PullToRefresh完成ListView下拉刷新和左滑刪除功能
- Android ListView實(shí)現(xiàn)仿iPhone實(shí)現(xiàn)左滑刪除按鈕的簡單實(shí)例
- Android自定義組合控件之自定義下拉刷新和左滑刪除實(shí)例代碼
- Android仿微信實(shí)現(xiàn)左滑顯示刪除按鈕功能
相關(guān)文章
Android ConnectivityManager網(wǎng)絡(luò)管理詳解
在android平臺(tái)中ConnectivityManager主要負(fù)責(zé)查詢網(wǎng)絡(luò)連接狀態(tài)以及在連接狀態(tài)有變化的時(shí)候發(fā)出通知,這篇文章主要介紹了Android ConnectivityManager網(wǎng)絡(luò)管理2022-11-11
Android中編寫簡單的手電筒小應(yīng)用的實(shí)例教程
這篇文章主要介紹了Android中編寫簡單的手電筒小應(yīng)用的實(shí)例教程,簡單粗暴地控制手機(jī)閃光燈的開閉,效果拔群XD 需要的朋友可以參考下2016-04-04
Android檢測(cè)Activity或者Service是否運(yùn)行的方法
下面小編就為大家分享一篇Android檢測(cè)Activity或者Service是否運(yùn)行的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-03-03
詳解Android應(yīng)用main函數(shù)的調(diào)用
Android常識(shí),App主線程初始化了Looper,調(diào)用prepare的地方是ActivityThread.main函數(shù)。問題來了,App的main函數(shù)在哪兒調(diào)用,下面我們來一起學(xué)習(xí)一下吧2019-06-06
Android Shape屬性創(chuàng)建環(huán)形進(jìn)度條
這篇文章主要介紹了Android Shape屬性創(chuàng)建環(huán)形進(jìn)度條的實(shí)例代碼,代碼簡單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-11-11
Android仿拉手網(wǎng)團(tuán)購App產(chǎn)品詳情界面效果
這篇文章主要介紹了Android仿拉手網(wǎng)團(tuán)購App產(chǎn)品詳情界面效果,代碼簡單易懂,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-05-05
Android Flutter實(shí)現(xiàn)3D動(dòng)畫效果示例詳解
在Flutter中提供了AnimatedWidget組件用于構(gòu)建可復(fù)用的動(dòng)畫組件。本文我們用AnimatedWidget來實(shí)現(xiàn)組件的3D旋轉(zhuǎn)效果,感興趣的可以了解一下2022-03-03
Android編程使用ListView實(shí)現(xiàn)數(shù)據(jù)列表顯示的方法
這篇文章主要介紹了Android編程使用ListView實(shí)現(xiàn)數(shù)據(jù)列表顯示的方法,實(shí)例分析了Android中ListView控件的使用技巧,需要的朋友可以參考下2016-01-01
Android Studio 下 Flutter 開發(fā)環(huán)境搭建過程
這篇文章主要介紹了Android Studio 下 Flutter 開發(fā)環(huán)境搭建/Flutter / Dart 插件安裝 | Flutter SDK 安裝 | 環(huán)境變量配置 | 開發(fā)環(huán)境檢查,本文圖文并茂給大家介紹的非常詳細(xì),需要的朋友可以參考下2020-03-03

