1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > ListView 仿QQ微信侧滑出现删除按钮

ListView 仿QQ微信侧滑出现删除按钮

时间:2020-06-29 18:14:19

相关推荐

ListView 仿QQ微信侧滑出现删除按钮

要在ListView侧滑时出现删除等按钮,见下面效果图:

实现起来很简单,使用HorizontalScrollView将正常显示的item层及操作按钮层水平并排起来,滑动时再将操作按钮显示出来,详见代码:

(1)MainActivity.java

package com.justlcw.csdn;import android.app.Activity;import android.os.Bundle;import android.util.DisplayMetrics;import android.widget.ListView;public class MainActivity extends Activity{private ListView mListView;private MyAdapter mAdapter;@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mListView = (ListView) findViewById(R.id.listView);DisplayMetrics dm = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(dm);mAdapter = new MyAdapter(this, dm.widthPixels);//ListViewmListView.setAdapter(mAdapter);}}

(2)MyAdapter.java

package com.justlcw.csdn;import java.util.ArrayList;import java.util.List;import android.content.Context;import android.view.LayoutInflater;import android.view.MotionEvent;import android.view.View;import android.view.ViewGroup;import android.view.ViewGroup.LayoutParams;import android.widget.BaseAdapter;import android.widget.Button;import android.widget.HorizontalScrollView;import android.widget.TextView;public class MyAdapter extends BaseAdapter implements View.OnClickListener { /** * 这个用来填充list */ private List<Integer> colors; /** * context上下文,用来获得convertView */ private Context mContext; /** * 屏幕宽度,由于我们用的是HorizontalScrollView,所以按钮选项应该在屏幕外 */ private int mScreentWidth; /** * 构造方法 * @param context * @param screenWidth */ public MyAdapter(Context context, int screenWidth) { //初始化 mContext = context; mScreentWidth = screenWidth; //填充list的内容 colors = new ArrayList<Integer>(); for (int i = 0; i < 5; i++) { colors.add(R.color.blue); } } @Override public int getCount() { return colors.size(); } @Override public Object getItem(int position) { return position; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { final ViewHolder holder; //如果没有设置过,初始化convertView if (convertView == null) { //获得设置的view convertView = LayoutInflater.from(mContext).inflate(R.layout.item_list, parent, false); //初始化holder holder = new ViewHolder(); /*** 整个item的水平滚动层*/holder.itemHorizontalScrollView = (HorizontalScrollView) convertView.findViewById(R.id.hsv); /*** 操作按钮层*/holder.actionLayout = convertView.findViewById(R.id.ll_action); holder.btOne = (Button) convertView.findViewById(R.id.button1); holder.btTwo = (Button) convertView.findViewById(R.id.button2); holder.btThree = (Button) convertView.findViewById(R.id.button3); //把位置放到view中,这样点击事件就可以知道点击的是哪一条item holder.btOne.setTag(position); holder.btTwo.setTag(position); holder.btThree.setTag(position); holder.tvContent = (TextView) convertView.findViewById(R.id.tv); //设置内容view的大小为屏幕宽度,这样按钮就正好被挤出屏幕外 holder.normalItemContentLayout = convertView.findViewById(R.id.ll_content); LayoutParams lp = holder.normalItemContentLayout.getLayoutParams(); lp.width = mScreentWidth; convertView.setTag(holder); } else//有直接获得ViewHolder { holder = (ViewHolder) convertView.getTag(); } //设置监听事件 convertView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_UP: //获得ViewHolder ViewHolder viewHolder = (ViewHolder) v.getTag(); //获得HorizontalScrollView滑动的水平方向值. int scrollX = viewHolder.itemHorizontalScrollView.getScrollX(); //获得操作区域的长度 int actionW = viewHolder.actionLayout.getWidth(); //注意使用smoothScrollTo,这样效果看起来比较圆滑,不生硬 //如果水平方向的移动值<操作区域的长度的一半,就复原 if (scrollX < actionW / 2) { viewHolder.itemHorizontalScrollView.smoothScrollTo(0, 0); } else//否则的话显示操作区域 { viewHolder.itemHorizontalScrollView.smoothScrollTo(actionW, 0); } return true; } return false; } }); //这里防止删除一条item后,ListView处于操作状态,直接还原 if (holder.itemHorizontalScrollView.getScrollX() != 0) { holder.itemHorizontalScrollView.scrollTo(0, 0); } //设置背景颜色,设置填充内容. holder.normalItemContentLayout.setBackgroundResource(colors.get(position)); holder.tvContent.setText("" + position); //设置监听事件 holder.btOne.setOnClickListener(this); holder.btTwo.setOnClickListener(this); holder.btThree.setOnClickListener(this); return convertView; } /** * ViewHolder *@Title: *@Description:主要是避免了不断的view获取初始化. *@Author:justlcw *@Since:-11-22 *@Version: */ class ViewHolder { public HorizontalScrollView itemHorizontalScrollView; /*** 正常(没左侧滑)情况的item内容布局*/public View normalItemContentLayout; public TextView tvContent; /*** 删除,添加,变色操作按钮层*/public View actionLayout; public Button btOne; public Button btTwo; public Button btThree; } @Override public void onClick(View v) { int position = (Integer) v.getTag(); switch (v.getId()) { case R.id.button1: colors.add(R.color.blue); break; case R.id.button2: colors.remove(position); break; case R.id.button3: if (colors.get(position) == R.color.blue) { colors.set(position, R.color.red); } else { colors.set(position, R.color.blue); } break; default: break; } //刷新ListView内容 notifyDataSetChanged(); } }

(3)主界面布局activity_main.xml

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent" ><ListViewandroid:id="@+id/listView"android:layout_width="match_parent"android:layout_height="wrap_content" ></ListView></RelativeLayout>

(4)item界面布局item_list.xml

<?xml version="1.0" encoding="utf-8"?><HorizontalScrollView xmlns:android="/apk/res/android"android:id="@+id/hsv"android:layout_width="wrap_content"android:layout_height="80dip"android:scrollbars="none" ><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="match_parent"android:orientation="horizontal" ><!-- 没有左侧滑操作的item显示界面 --><LinearLayoutandroid:id="@+id/ll_content"android:layout_width="match_parent"android:layout_height="match_parent" ><TextViewandroid:id="@+id/tv"android:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"android:text="" /></LinearLayout><!-- 左侧滑操作后的显示出的操作按钮层 --><LinearLayoutandroid:id="@+id/ll_action"android:layout_width="wrap_content"android:layout_height="match_parent"android:orientation="horizontal" ><Buttonandroid:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="match_parent"android:background="@android:color/darker_gray"android:paddingLeft="20dip"android:paddingRight="20dip"android:text="@string/action1" /><Buttonandroid:id="@+id/button2"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_marginLeft="2dip"android:layout_marginRight="2dip"android:background="@android:color/darker_gray"android:paddingLeft="20dip"android:paddingRight="20dip"android:text="@string/action2" /><Buttonandroid:id="@+id/button3"android:layout_width="wrap_content"android:layout_height="match_parent"android:background="@android:color/darker_gray"android:paddingLeft="20dip"android:paddingRight="20dip"android:text="@string/action3" /></LinearLayout></LinearLayout></HorizontalScrollView>

(5)color.xml

<?xml version="1.0" encoding="utf-8"?><resources><color name="red">#f5c662</color><color name="blue">#96cff7</color></resources>

(6)strings.xml

<?xml version="1.0" encoding="utf-8"?><resources><string name="app_name">ListViewSlidingMenu</string><string name="action1"> 添 加 </string><string name="action2"> 删 除 </string><string name="action3"> 变 色 </string></resources>

源代码见附件

另可参考:

/chaishen10000/article/details/22527365

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。