类似于微信:
TestActivity.java
import java.util.ArrayList;
import java.util.List;
import android.os.Bundle;
import android.R.integer;
import android.app.Activity;
import android.util.DisplayMetrics;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.HorizontalScrollView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.ListView;
import android.widget.TextView;
public class TestActivity extends Activity
{
ListView listView;
List<String> infos = new ArrayList<String>();
DisplayMetrics dm;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate( savedInstanceState );
setContentView( R.layout.test );
listView = (ListView) findViewById( R.id.lv );
for ( int i = 0; i < 25; i++ )
{
infos.add( "info " + i );
}
dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics( dm );
SwipAdapter adapter = new SwipAdapter();
listView.setAdapter( adapter );
}
class SwipAdapter extends BaseAdapter
{
@Override
public int getCount()
{
// TODO Auto-generated method stub
return infos.size();
}
@Override
public CharSequence getItem(int position)
{
// TODO Auto-generated method stub
return infos.get( position );
}
@Override
public long getItemId(int position)
{
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent)
{
// TODO Auto-generated method stub
final Viewholder holder;
if (convertView == null)
{
convertView = View.inflate( TestActivity.this, R.layout.item, null );
holder = new Viewholder();
holder.ll_content = (LinearLayout) convertView.findViewById( R.id.ll_content );
holder.ll_action = (LinearLayout) convertView.findViewById( R.id.ll_action );
holder.tv_content = (TextView) convertView.findViewById( R.id.tv_content );
holder.btn_del = (Button) convertView.findViewById( R.id.btn_del );
holder.hs = (HorizontalScrollView) convertView.findViewById( R.id.hs );
// 设置ll_content的宽度为屏幕宽度
LayoutParams params = (LayoutParams) holder.ll_content.getLayoutParams();
params.width = dm.widthPixels;
convertView.setTag( holder );
}
else
{
holder = (Viewholder) convertView.getTag();
}
holder.tv_content.setText( getItem( position ) );
convertView.setOnTouchListener( new OnTouchListener()
{
@Override
public boolean onTouch(View v, MotionEvent event)
{
switch (event.getAction())
{
case MotionEvent.ACTION_UP:
int x = holder.hs.getScrollX();
int width = holder.ll_action.getWidth();
if (x < width / 2)
{
holder.hs.scrollBy( 0, 0 );
}
else
{
holder.hs.smoothScrollBy( width, 0 );
}
break;
default:
break;
}
return false;
}
} );
holder.btn_del.setOnClickListener( new OnClickListener()
{
@Override
public void onClick(View v)
{
infos.remove( position );
notifyDataSetChanged();
}
} );
// 这里防止删除一条item后,ListView处于操作状态,直接还原
if (holder.hs.getScrollX() != 0)
{
holder.hs.scrollTo( 0, 0 );
}
return convertView;
}
final class Viewholder
{
LinearLayout ll_content;
LinearLayout ll_action;
TextView tv_content;
Button btn_del;
HorizontalScrollView hs;
}
}
}
布局文件:test.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<ListView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/lv"
/>
</RelativeLayout>
item.xml
<?xml version="1.0" encoding="utf-8"?>
<HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/hs"
android:scrollbars="none"
>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<LinearLayout
android:id="@+id/ll_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/tv_content"
android:gravity="center"
/>
</LinearLayout>
<LinearLayout
android:id="@+id/ll_action"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btn_del"
android:text="Delete"
/>
</LinearLayout>
</LinearLayout>
</HorizontalScrollView>
界面: