之前由于项目需要,要写一个像QQ一样的滑动删除,自己想了一下发现Android自带控件HorizontalScrollView,就可以实现,应该是最简单的方法了。话不多说,直接上代码:
<?xml version="1.0" encoding="utf-8"?>
<!-- listview的每一项 -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#ffffff"
android:orientation="horizontal">
<HorizontalScrollView
android:id="@+id/hr_ill_adp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="none"
android:fillViewport="true">
<RelativeLayout
android:id="@+id/rl_1_item_ill_adp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff" >
<RelativeLayout
android:id="@+id/rl_2_item_ill_adp"
android:layout_width="match_parent"
android:layout_height="80dp"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_centerHorizontal="true">
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:layout_marginLeft="42dp"
android:text="显示的字" />
</RelativeLayout>
<RelativeLayout
android:layout_width="80dp"
android:layout_height="80dp"
android:id="@+id/rl_3_item_ill_adp"
android:layout_alignParentRight="true">
<TextView
android:id="@+id/tv_delete_ill_adapter"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FF0000"
android:gravity="center"
android:text="删除" />
</RelativeLayout>
</RelativeLayout>
</HorizontalScrollView>
</LinearLayout>
这是listview的布局文件,一个HorizontalScrollView中,两个RelativeLayout,左边放文字,右边放删除按钮。
如何实现,删除按钮的划出呢,那就要使其刚开始在右边的界面外,来看Adapter代码如何设置的。
package com.example.myslidingdelete;
import java.util.List;
import android.content.Context;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.FrameLayout.LayoutParams;
import android.widget.RelativeLayout;
import android.widget.TextView;
public class AdapterDelete extends BaseAdapter
{
private List<String> list;
private Context context;
private int w;
private Handler handler;
public AdapterDelete(List<String> list , Context context,Handler handler){
this.list = list;
this.context = context;
this.handler = handler;
this.w = (int)(80 * context.getResources().getDisplayMetrics().density);
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int location) {
return list.get(location);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if(convertView == null){
Log.i("", list.get(position)+"----"+position);
holder = new ViewHolder();
//加载布局
convertView = View.inflate(context, R.layout.item, null);
//找控件
holder.text = (TextView) convertView.findViewById(R.id.textView1);
holder.sc_r0 = (RelativeLayout) convertView.findViewById(R.id.rl_1_item_ill_adp);
holder.sc_r1 = (RelativeLayout) convertView.findViewById(R.id.rl_2_item_ill_adp);
holder.sc_r2 = (RelativeLayout) convertView.findViewById(R.id.rl_3_item_ill_adp);
LayoutParams l = new android.widget.FrameLayout.LayoutParams(MainActivity.SCREENWIDTH + w, w);
holder.sc_r0.setLayoutParams(l);
android.widget.RelativeLayout.LayoutParams l1 = new android.widget.RelativeLayout.LayoutParams(MainActivity.SCREENWIDTH, w);
holder.sc_r1.setLayoutParams(l1);
android.widget.RelativeLayout.LayoutParams l2 = new android.widget.RelativeLayout.LayoutParams(w, w);
l2.leftMargin = MainActivity.SCREENWIDTH;
holder.sc_r2.setLayoutParams(l2);
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}
//赋值
holder.text.setText(list.get(position));
//删除
holder.sc_r2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
handler.sendEmptyMessage(position);
}
});
return convertView;
}
private class ViewHolder{
private TextView text ;
private RelativeLayout sc_r0,sc_r1,sc_r2;
}
}
LayoutParams l = new android.widget.FrameLayout.LayoutParams(MainActivity.SCREENWIDTH + w, w);
holder.sc_r0.setLayoutParams(l);
android.widget.RelativeLayout.LayoutParams l1 = new android.widget.RelativeLayout.LayoutParams(MainActivity.SCREENWIDTH, w);
holder.sc_r1.setLayoutParams(l1);
android.widget.RelativeLayout.LayoutParams l2 = new android.widget.RelativeLayout.LayoutParams(w, w);
l2.leftMargin = MainActivity.SCREENWIDTH;
holder.sc_r2.setLayoutParams(l2);
第一个LayoutParams是HorizontalScrollView内最外层的RelativeLayout的布局,其宽度设置为:屏幕宽度+删除的按钮宽度,
第二个LayoutParams是文字外面的RelativeLayout的布局,其宽度设置为:屏幕宽度,
第三个LayoutParams是删除按钮外面的RelativeLayout的布局,其宽度设置为:删除按钮宽度,且距离左边距离为:屏幕宽度,这样初始化的时候就看不见删除按钮,滑动时就能看见。从而实现滑动删除。
好了,主要代码都在上面了,其中有些小问题,不影响使用,自己稍加修改即可。
如果要下载完整demo,请点击下面链接:
http://download.csdn.net/detail/u013790519/8526079