Android 侧滑删除功能
来源:互联网 发布:传奇手游源码 编辑:程序博客网 时间:2024/05/22 10:35
重定义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"?><merge xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <LinearLayout android:id="@+id/view_content" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > </LinearLayout> <RelativeLayout android:id="@+id/holder" android:layout_width="120dp" android:layout_height="match_parent" android:layout_marginBottom="1dp" android:clickable="true" > <TextView android:id="@+id/delete" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:gravity="center" android:text="删除" android:textColor="#fff" /> </RelativeLayout></merge>
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@color/holder_pressed" android:state_pressed="true"></item> <item android:drawable="@color/holder_pressed" android:state_focused="true"></item> <item android:drawable="@color/holder_pressed" android:state_selected="true"></item> <item android:drawable="@color/holder_normal"></item></selector>
<color name="holder_normal">#E84A40</color> <color name="holder_pressed">#E22F2F</color>
代码:http://download.csdn.net/detail/hknock/8877003
1 0
- Android 侧滑删除功能
- Android listView item侧滑实现删除和置顶功能
- android 仿qq的侧滑删除功能
- Android listView item侧滑实现删除和置顶功能
- Android一步一步带你实现RecyclerView的拖拽和侧滑删除功能
- Android一步一步带你实现RecyclerView的拖拽和侧滑删除功能
- Android一步一步带你实现RecyclerView的拖拽和侧滑删除功能
- Android一步一步带你实现RecyclerView的拖拽和侧滑删除功能
- Android一步一步带你实现RecyclerView的拖拽和侧滑删除功能
- Android LRecyclerView实现Item侧滑菜单、长按拖拽Item、滑动删除Item等功能
- Android LRecyclerView实现Item侧滑菜单、长按拖拽Item、滑动删除Item等功能
- Android Scroller详解,实现仿QQ列表item侧滑删除功能
- Android一步一步带你实现RecyclerView的拖拽和侧滑删除功能
- PullToRefreshListView增加侧滑删除功能
- tableView上的侧滑删除功能
- 自定义view实现侧滑删除功能
- PullToRefresh 加入侧滑删除功能
- Android ListView左滑删除、左滑自定义功能
- 朱镕基改制是成功的吗?(知乎高手的回答)
- POJ 1787 - Charlie's Change(完全背包+路径记录)
- android中有关SQLite数据库的特性和概念加使用方法详解!
- 第三章 栈和队列 知识导图
- uwsgi+webpy自启动配置脚本
- Android 侧滑删除功能
- Java split用法及注意事项
- Mybatis分页插件PageHelper正确的使用方法(网上有2篇不够科学的文章)
- Xcode配置SVN详细步骤
- 信息自动滚动
- SqlSessionFactoryBean的事务管理器技术探究
- 好消息:庆祝小张网校成立
- Android KK平台,联系人列表#组置于A~Z之前
- 云平台关键技术