android 下拉刷新上拉加载更多,高仿ios左滑动删除item,解决了众多手势问题

 

android 下拉刷新上拉加载更多,高仿ios左滑动删除item,解决了众多手势问题


一、前言

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



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

[java]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. package com.icq.slideview.view;  
  2.   
  3. import android.content.Context;  
  4. import android.util.AttributeSet;  
  5. import android.util.Log;  
  6. import android.util.TypedValue;  
  7. import android.view.MotionEvent;  
  8. import android.view.View;  
  9. import android.widget.LinearLayout;  
  10. import android.widget.RelativeLayout;  
  11. import android.widget.Scroller;  
  12. import android.widget.TextView;  
  13.   
  14. import com.icq.slideview.R;  
  15.   
  16. public class SlideView extends LinearLayout {  
  17.   
  18.     private static final String TAG = "SlideView";  
  19.   
  20.     private Context mContext;  
  21.     private LinearLayout mViewContent;  
  22.     private RelativeLayout mHolder;  
  23.     private Scroller mScroller;  
  24.     private OnSlideListener mOnSlideListener;  
  25.   
  26.     private int mHolderWidth = 120;  
  27.   
  28.     private int mLastX = 0;  
  29.     private int mLastY = 0;  
  30.     private static final int TAN = 2;  
  31.   
  32.     public interface OnSlideListener {  
  33.         public static final int SLIDE_STATUS_OFF = 0;  
  34.         public static final int SLIDE_STATUS_START_SCROLL = 1;  
  35.         public static final int SLIDE_STATUS_ON = 2;  
  36.   
  37.         /** 
  38.          * @param view current SlideView 
  39.          * @param status SLIDE_STATUS_ON or SLIDE_STATUS_OFF 
  40.          */  
  41.         public void onSlide(View view, int status);  
  42.     }  
  43.   
  44.     public SlideView(Context context) {  
  45.         super(context);  
  46.         initView();  
  47.     }  
  48.   
  49.     public SlideView(Context context, AttributeSet attrs) {  
  50.         super(context, attrs);  
  51.         initView();  
  52.     }  
  53.   
  54.     private void initView() {  
  55.         mContext = getContext();  
  56.         mScroller = new Scroller(mContext);  
  57.   
  58.         setOrientation(LinearLayout.HORIZONTAL);  
  59.         View.inflate(mContext, R.layout.slide_view_merge, this);  
  60.         mViewContent = (LinearLayout) findViewById(R.id.view_content);  
  61.         mHolderWidth = Math.round(TypedValue.applyDimension(  
  62.                 TypedValue.COMPLEX_UNIT_DIP, mHolderWidth, getResources()  
  63.                         .getDisplayMetrics()));  
  64.     }  
  65.   
  66.     public void setButtonText(CharSequence text) {  
  67.         ((TextView)findViewById(R.id.delete)).setText(text);  
  68.     }  
  69.   
  70.     public void setContentView(View view) {  
  71.         mViewContent.addView(view);  
  72.     }  
  73.   
  74.     public void setOnSlideListener(OnSlideListener onSlideListener) {  
  75.         mOnSlideListener = onSlideListener;  
  76.     }  
  77.   
  78.     public void shrink() {  
  79.         if (getScrollX() != 0) {  
  80.             this.smoothScrollTo(00);  
  81.         }  
  82.     }  
  83.   
  84.     public void onRequireTouchEvent(MotionEvent event) {  
  85.         int x = (int) event.getX();  
  86.         int y = (int) event.getY();  
  87.         int scrollX = getScrollX();  
  88.         Log.d(TAG, "x=" + x + "  y=" + y);  
  89.   
  90.         switch (event.getAction()) {  
  91.         case MotionEvent.ACTION_DOWN: {  
  92.               
  93.             int deltaX = x - mLastX;  
  94.              System.out.println("按下偏移"+deltaX);  
  95.             if (!mScroller.isFinished()) {  
  96.                 mScroller.abortAnimation();  
  97.             }  
  98.             if (mOnSlideListener != null) {  
  99.                 mOnSlideListener.onSlide(this,  
  100.                         OnSlideListener.SLIDE_STATUS_START_SCROLL);  
  101.             }  
  102.             break;  
  103.         }  
  104.         case MotionEvent.ACTION_MOVE: {  
  105.             int deltaX = x - mLastX;  
  106.             int deltaY = y - mLastY;  
  107.             System.out.println("偏移"+deltaX);  
  108.             if (Math.abs(deltaX) < Math.abs(deltaY) * TAN) {  
  109.                 break;  
  110.             }  
  111.   
  112.             int newScrollX = scrollX - deltaX;  
  113.             if (deltaX != 0) {  
  114.                 if (newScrollX < 0) {  
  115.                     newScrollX = 0;  
  116.                 } else if (newScrollX > mHolderWidth) {  
  117.                     newScrollX = mHolderWidth;  
  118.                 }  
  119.                 this.scrollTo(newScrollX, 0);  
  120.             }  
  121.             break;  
  122.         }  
  123.         case MotionEvent.ACTION_UP: {  
  124.             int newScrollX = 0;  
  125.             if (scrollX - mHolderWidth * 0.75 > 0) {  
  126.                 newScrollX = mHolderWidth;  
  127.             }  
  128.             this.smoothScrollTo(newScrollX, 0);  
  129.             if (mOnSlideListener != null) {  
  130.                 mOnSlideListener.onSlide(this,  
  131.                         newScrollX == 0 ? OnSlideListener.SLIDE_STATUS_OFF  
  132.                                 : OnSlideListener.SLIDE_STATUS_ON);  
  133.             }  
  134.             break;  
  135.         }  
  136.         default:  
  137.             break;  
  138.         }  
  139.   
  140.         mLastX = x;  
  141.         mLastY = y;  
  142.     }  
  143.   
  144.     private void smoothScrollTo(int destX, int destY) {  
  145.         // 缓慢滚动到指定位置  
  146.         int scrollX = getScrollX();  
  147.         int delta = destX - scrollX;  
  148.         System.out.println("偏移scrollX"+scrollX);  
  149.         System.out.println("偏移差delta"+delta);  
  150.         int a= Math.abs(delta) * 3;  
  151.         System.out.println("什么意思"+a);  
  152.         mScroller.startScroll(scrollX, 0, delta, 0, Math.abs(delta) * 3);  
  153.         invalidate();  
  154.     }  
  155.   
  156.     @Override  
  157.     public void computeScroll() {  
  158.         if (mScroller.computeScrollOffset()) {  
  159.             System.out.println("当前x位置:"+mScroller.getCurrX());  
  160.             System.out.println("当前Y位置:"+mScroller.getCurrY());  
  161.             scrollTo(mScroller.getCurrX(), mScroller.getCurrY());  
  162.             postInvalidate();  
  163.         }  
  164.     }  
  165.   
  166. }  

三、直接源码下载了:最近总结一下,csdn在我看来最近没有那么活跃了,真正的大牛已经很少在csdn发微博了,都去了github、stackoverflow、eoe等网站了!哎,逼于无奈我后期也得转移阵地了!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值