当前位置: 首页 > news >正文

2015选择做导航网站乔拓云网站建设

2015选择做导航网站,乔拓云网站建设,快递企业网站建设设计方案范例,新乡市四合一网站建设随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666) 在实际项目中删除列表中的某一项是非常常见的功能,传统的做法可以使用长按监听器等,而现在流行的做法是左滑弹出删除按钮,微信…

随时随地技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)

在实际项目中删除列表中的某一项是非常常见的功能,传统的做法可以使用长按监听器等,而现在流行的做法是左滑弹出删除按钮,微信,QQ等都是这么做的,下面做一个示例,代码如下:

主页面MainActivity:代码比较简单常规

package com.home.testslideview;import java.util.ArrayList;
import java.util.List;import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;import com.home.textslideview.R;public class MainActivity extends Activity {private ListView listView;private List<NewInfoBean> list = new ArrayList<NewInfoBean>();// 适配器private SlideAdapter adapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);initView();initData();setAdapter();}/*** 初始化页面控件*/private void initView() {listView = (ListView) findViewById(R.id.main_lv);}/*** 初始化数据*/private void initData() {list.add(new NewInfoBean("这是测试内容1"));list.add(new NewInfoBean("这是测试内容2"));list.add(new NewInfoBean("这是测试内容3"));list.add(new NewInfoBean("这是测试内容4"));list.add(new NewInfoBean("这是测试内容5"));list.add(new NewInfoBean("这是测试内容6"));list.add(new NewInfoBean("这是测试内容7"));list.add(new NewInfoBean("这是测试内容8"));list.add(new NewInfoBean("这是测试内容9"));list.add(new NewInfoBean("这是测试内容10"));}/*** 设置适配器*/private void setAdapter() {if (adapter == null) {adapter = new SlideAdapter(this, list);listView.setAdapter(adapter);} else {adapter.setList(list);adapter.notifyDataSetChanged();}}}


实体类NewInfoBean:具体项目中由自己定义:

package com.home.testslideview;public class NewInfoBean {public SlideView slideView;private String content;public SlideView getSlideView() {return slideView;}public void setSlideView(SlideView slideView) {this.slideView = slideView;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}public NewInfoBean() {super();}public NewInfoBean(String content) {super();this.content = content;}}

适配器SlideAdapter:也比较简单

package com.home.testslideview;import java.util.List;import android.content.Context;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;import com.home.testslideview.SlideView.OnSlideListener;
import com.home.textslideview.R;public class SlideAdapter extends BaseAdapter implements OnSlideListener,OnClickListener {private LayoutInflater inflater;private List<NewInfoBean> list;private Context context;public SlideAdapter(Context context, List<NewInfoBean> list) {if (inflater == null) {inflater = LayoutInflater.from(context);}this.list = list;this.context = context;}@Overridepublic int getCount() {return list.size();}@Overridepublic Object getItem(int position) {return list.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup arg2) {SlideView slideView = (SlideView) convertView;NewInfoBean bean = list.get(position);if (slideView == null) {slideView = new SlideView(context);slideView.setOnSlideListener(this);}// 设置内容TextView contentText = getAdapterView(slideView,R.id.slideview_tv_content, position);contentText.setText(bean.getContent());// 删除按钮TextView delText = getAdapterView(slideView, R.id.slideview_tv_del,position);delText.setOnClickListener(this);bean.slideView = slideView;bean.slideView.shrink();return slideView;}@SuppressWarnings("unchecked")public <T extends View> T getAdapterView(View convertView, int id,Object tag) {SparseArray<View> viewHolder = null;try {if (convertView.getTag(R.id.view_holder) instanceof SparseArray<?>) {viewHolder = (SparseArray<View>) convertView.getTag(R.id.view_holder);}} catch (ClassCastException e) {}if (viewHolder == null) {viewHolder = new SparseArray<View>();convertView.setTag(R.id.view_holder, viewHolder);convertView.setTag(R.id.order_id, tag);}View childView = viewHolder.get(id);if (childView == null) {childView = convertView.findViewById(id);childView.setTag(tag);viewHolder.put(id, childView);}return (T) childView;}public List<NewInfoBean> getList() {return list;}public void setList(List<NewInfoBean> list) {this.list = list;}@Overridepublic void onSlide(View view, int status) {}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.slideview_tv_del:int position = (Integer) v.getTag();list.remove(position);notifyDataSetChanged();break;default:break;}}}

比较关键的两个类:

自定义的ListView:SlideListView

package com.home.testslideview;import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ListView;public class SlideListView extends ListView {private SlideView itemView;public SlideListView(Context context) {super(context);}public SlideListView(Context context, AttributeSet attrs) {super(context, attrs);}public void shrinkListItem(int position) {View item = getChildAt(position);if (item != null) {try {((SlideView) item).shrink();} catch (ClassCastException e) {e.printStackTrace();}}}@Overridepublic boolean onTouchEvent(MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN: {int x = (int) event.getX();int y = (int) event.getY();int position = pointToPosition(x, y);if (position != INVALID_POSITION) {NewInfoBean data = (NewInfoBean) getItemAtPosition(position);itemView = data.slideView;}}default:break;}if (itemView != null) {itemView.onRequireTouchEvent(event);}return super.onTouchEvent(event);}}


自定义的ListView中的每一行控件:SlideView(借鉴网上的一个示例):

package com.home.testslideview;import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
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 com.home.textslideview.R;public class SlideView extends LinearLayout {private static final String TAG = SlideView.class.getSimpleName();private Context mContext;private Scroller mScroller;private OnSlideListener mOnSlideListener;private int mHolderWidth = 80;private int mLastX = 0;private int mLastY = 0;private static final int TAN = 2;private LayoutInflater inflater;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();if (inflater == null) {inflater = LayoutInflater.from(mContext);}mScroller = new Scroller(mContext);setOrientation(LinearLayout.HORIZONTAL);View.inflate(mContext, R.layout.slide_view_merge, this);mHolderWidth = Math.round(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, mHolderWidth, getResources().getDisplayMetrics()));}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: {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;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;mScroller.startScroll(scrollX, 0, delta, 0, Math.abs(delta) * 3);invalidate();}@Overridepublic void computeScroll() {if (mScroller.computeScrollOffset()) {scrollTo(mScroller.getCurrX(), mScroller.getCurrY());postInvalidate();}}}


main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><com.home.testslideview.SlideListViewandroid:id="@+id/main_lv"android:layout_width="match_parent"android:layout_height="match_parent"android:cacheColorHint="#00000000"android:fadingEdge="none"android:listSelector="#00000000"android:scrollbars="none" /></LinearLayout>


slide_view_merge.xml:

<?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"android:orientation="horizontal" ><LinearLayoutandroid:id="@+id/slideview_layout_content"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_gravity="center_vertical"android:gravity="center_vertical"android:orientation="horizontal" ><TextView android:id="@+id/slideview_tv_content"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="内容部分"/></LinearLayout><LinearLayoutandroid:id="@+id/view_layout_del"android:layout_width="80dp"android:layout_height="match_parent"android:layout_gravity="center_vertical"android:layout_toRightOf="@id/slideview_layout_content"android:clickable="true"android:gravity="center_vertical"android:orientation="horizontal" ><TextViewandroid:id="@+id/slideview_tv_del"android:layout_width="80dp"android:layout_height="match_parent"android:layout_marginBottom="2dp"android:gravity="center"android:padding="15dp"android:text="删除"/></LinearLayout></merge>


源码下载:高仿微信左滑删除效果_recyclerview左滑删除-Android代码类资源-CSDN下载

http://www.lbrq.cn/news/2379943.html

相关文章:

  • 中国企业网官方网站查询数字化营销
  • 上海网站搭建平台公司河南关键词优化搜索
  • 工商营业执照网上年审入口电脑优化系统的软件哪个好
  • 成都好玩的地方百度seo插件
  • 用什么工具做网站百度广告代理
  • 汉阳网站建设湖南靠谱seo优化报价
  • 保山手机网站建设关键词优化好
  • 阿里巴巴的电子商务网站建设网推团队
  • 莆田百度推广开户免费关键词优化工具
  • 开锁公司网站模板怎样把个人介绍放到百度
  • 建设一个网站需要多少钱百度移动应用
  • 做影视网站须要注意什么seo网站推广目的
  • 南通做网站的公司超云seo优化
  • 商城网站开发视频数据分析师资格证书怎么考
  • 网站建设免费的推广普通话宣传周
  • 悦然网络工作室广州百度快速优化排名
  • 中华人民共和国商务部网站市场建设司安徽网站推广
  • 做360手机网站优搭建网站需要哪些步骤
  • 怎么制作网站游戏优化关键词排名的工具
  • 商丘市建立网站公司电商培训机构有哪些?哪家比较好
  • dw做网站的实用特效网址收录查询
  • 沈阳营销型网站制作技术网页设计html代码大全
  • 武汉S001网站建设哪家好考研培训班哪个机构比较好
  • 遵义广告公司网站建设如何申请域名
  • 有关电子商务网站建设的 论文石家庄百度搜索引擎优化
  • 网站建设微信营销百度app优化
  • 电商的推广方式纯手工seo公司
  • 常德德山经开区建设局网站广州seo
  • wordpress 个人发布功能肇庆seo
  • excel做公司的小网站网站怎么优化seo
  • 饿了么app 抓包 hook
  • 初探:C语言FILE结构之文件描述符与缓冲区的实现原理
  • NLP-文本预处理
  • 横向移动(下)
  • 【AI智能体】Dify 基于知识库搭建智能客服问答应用详解
  • 基于Python的图像文字识别系统