重定义listview

import android.content.Context;import android.util.AttributeSet;import android.view.MotionEvent;import android.widget.ListView;public class SliderListView extends ListView {private static final String TAG = "SliderListView";private float mX = 0;private float mY = 0;private int mPosition = -1;private boolean isSlider = false;private SlideView mFocusedItemView;public SliderListView(Context context) {super(context);}public SliderListView(Context context, AttributeSet attrs) {super(context, attrs);}public SliderListView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);}@Overridepublic boolean onTouchEvent(MotionEvent event) {float x = event.getX();float y = event.getY();switch (event.getAction()) {case MotionEvent.ACTION_DOWN:isSlider = false;mX = x;mY = y;int position = pointToPosition((int) x, (int) y);if (mPosition != position) {mPosition = position;if (mFocusedItemView != null) {mFocusedItemView.reset();}}break;case MotionEvent.ACTION_MOVE:if (mPosition != -1) {if (Math.abs(mY - y) < 30 && Math.abs(mX - x) > 20) {int first = this.getFirstVisiblePosition();int index = mPosition - first;mFocusedItemView = (SlideView) getChildAt(index);// mFocusedItemView = (SlideView)// getItemAtPosition(mPosition);mFocusedItemView.onTouchEvent(event);isSlider = true;return true;}}break;case MotionEvent.ACTION_UP:if (isSlider) {isSlider = false;if (mFocusedItemView != null) {mFocusedItemView.adjust(mX - x > 0);return true;}}break;}return super.onTouchEvent(event);}}


滑动view

import android.content.Context;import android.content.res.Resources;import android.util.AttributeSet;import android.util.TypedValue;import android.view.LayoutInflater;import android.view.MotionEvent;import android.view.View;import android.widget.LinearLayout;import android.widget.Scroller;import android.widget.TextView;import com.future.wodownloadmanager.R;public class SlideView extends LinearLayout {private static final String TAG = "SlideView";private static final int TAN = 2;private int mHolderWidth = 120;private float mLastX = 0;private float mLastY = 0;private LinearLayout mViewContent;private Scroller mScroller;private Context mContext;private Resources mResources;private SlideView(Context context) {super(context);initView(null, null, null);}public SlideView(Context context, Resources resources, View content) {super(context);this.mContext = context;this.mResources = resources;initView(context, resources, content);}private SlideView(Context context, AttributeSet attrs) {super(context, attrs);initView(null, null, null);}private void initView(Context context, Resources resources, View content) {setOrientation(LinearLayout.HORIZONTAL);mScroller = new Scroller(context);LayoutInflater.from(context).inflate(resources.getLayout(R.layout.slide_view_merge), this);findViewById(R.id.holder).setBackground(resources.getDrawable(R.drawable.selector_slider_holder));TextView delete = (TextView) findViewById(R.id.delete);delete.setCompoundDrawablesWithIntrinsicBounds(resources.getDrawable(R.drawable.ic_delete), null, null, null);mViewContent = (LinearLayout) findViewById(R.id.view_content);mHolderWidth = Math.round(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, mHolderWidth, getResources().getDisplayMetrics()));if (content != null) {mViewContent.addView(content);}}public void shrink() {int offset = getScrollX();if (offset == 0) {return;}scrollTo(0, 0);}public void setContentView(View view) {if (mViewContent != null) {mViewContent.addView(view);}}public void reset() {int offset = getScrollX();if (offset == 0) {return;}smoothScrollTo(0, 0);}public void adjust(boolean left) {int offset = getScrollX();if (offset == 0) {return;}if (offset < 20) {this.smoothScrollTo(0, 0);} else if (offset < mHolderWidth - 20) {if (left) {this.smoothScrollTo(mHolderWidth, 0);} else {this.smoothScrollTo(0, 0);}} else {this.smoothScrollTo(mHolderWidth, 0);}}@Overridepublic boolean onTouchEvent(MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_MOVE:float x = event.getX();float y = event.getY();float deltaX = x - mLastX;float delatY = y - mLastY;mLastX = x;mLastY = y;if (Math.abs(deltaX) < Math.abs(delatY) * TAN) {break;}if (deltaX != 0) {float newScrollX = getScrollX() - deltaX;if (newScrollX < 0) {newScrollX = 0;} else if (newScrollX > mHolderWidth) {newScrollX = mHolderWidth;}this.scrollTo((int) newScrollX, 0);}break;}return super.onTouchEvent(event);}private void smoothScrollTo(int destX, int destY) {int scrollX = getScrollX();int delta = destX - scrollX;mScroller.startScroll(scrollX, 0, delta, 0, Math.abs(delta) * 3);invalidate();}@Overridepublic void computeScroll() {if (mScroller.computeScrollOffset()) {scrollTo(mScroller.getCurrX(), mScroller.getCurrY());postInvalidate();}}}


获取view是需要重置缓存状态

public View getView(final int position, View convertView,
ViewGroup parent) 


slideview.shrink()


布局文件

<?xml version="1.0" encoding="utf-8"?>                        


<?xml version="1.0" encoding="utf-8"?>                

    #E84A40    #E22F2F


Android 侧滑删除功能_第1张图片



代码:http://download.csdn.net/detail/hknock/8877003



更多相关文章

  1. Android Studio 第五十三期 - 自定义EditText密码键盘
  2. Android实现圆形头像-使用自定义控件
  3. android 算定义布局xml
  4. 自定义全屏Dialog
  5. android -布局控件禁用多点触控
  6. 1、ListView自定义控件下拉刷新(一)
  7. Gradle离线配置、.android、.AndroidStudio、.gradle、.m2缓存文
  8. Android使用AttributeSet自定义控件的方法

随机推荐

  1. 2011.06.21(2)——— android invalidate
  2. android framework增加新的系统服务
  3. Android帮助文档.exe(第1,2,3部分)提供下载
  4. Android(安卓)Makefile中是 如何识别 TAR
  5. android framework 图解分享
  6. Android(安卓)Camera源码函数结构
  7. Android(安卓)ImageView 总结
  8. android开发每日汇总【2011-11-26】
  9. 怎么设置Android(安卓)Activity的动画
  10. Android安装和删除(卸载)应用软件程序(ap