标签:setondismisslistener pointtoposition setanimationlistener popupwindow getchildat
MainActivity
package com.example.ss; import java.util.ArrayList; import android.app.ListActivity; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.view.animation.Animation; import android.view.animation.Animation.AnimationListener; import android.view.animation.AnimationUtils; import android.widget.AdapterView; import android.widget.Button; import android.widget.ListView; import android.widget.PopupWindow; import android.widget.PopupWindow.OnDismissListener; import android.widget.Toast; import com.example.ss.adapters.NewsListAdapter; import com.example.ss.adapters.NewsListAdapter.ViewHolder; import com.example.ss.adapters.User; public class MainActivity extends ListActivity { private ArrayList<User> array; private NewsListAdapter adapter; private PopupWindow pop; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); final ListView listView = getListView(); array = getData(); adapter = new NewsListAdapter(this, array); listView.setAdapter(adapter); //创建popupwindow pop = new PopupWindow(); pop.setTouchable(true); pop.setWidth(LayoutParams.WRAP_CONTENT); pop.setHeight(LayoutParams.WRAP_CONTENT); pop.setFocusable(true); ColorDrawable dw = new ColorDrawable(0x00000000); pop.setBackgroundDrawable(dw); //这个方法是:左滑出现删除按钮时候,点击其他位置,删除按钮消失,回归正常状态 pop.setOnDismissListener(new OnDismissListener() { @Override public void onDismiss() { unDelete(CurrentView, -2); } }); /** * 添加listview滑动接听 */ listView.setOnTouchListener(new OnTouchListener() { float x, y, upx, upy; public boolean onTouch(View view, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { x = event.getX(); y = event.getY(); } if (event.getAction() == MotionEvent.ACTION_UP) { upx = event.getX(); upy = event.getY(); int position1 = ((ListView) view).pointToPosition((int) x, (int) y); int position2 = ((ListView) view).pointToPosition( (int) upx, (int) upy); if (position1 == position2) { View v = ((ListView) view).getChildAt(position1); if ((x - upx) > 0) { /** * 手指向左滑动,弹出删除按钮,Item出现动画效果 */ prepareDelete(v, position1); } } } return false; } }); /** * listview 的item 点击事件 */ //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View rowView, int positon, long id) { if (CurrentView != null) { unDelete(CurrentView, positon); } } }); } protected void unDelete(final View rowView, final int positon) { if (rowView==null) { return; } if ("half_delete".equals(((ViewHolder) rowView.getTag()).status)) { final Animation animation = (Animation) AnimationUtils .loadAnimation(rowView.getContext(), R.anim.item2); animation.setFillAfter(true); ((ViewHolder) rowView.getTag()).status = "normal"; CurrentView = null; animation.setAnimationListener(new AnimationListener() { public void onAnimationStart(Animation animation) { } public void onAnimationRepeat(Animation animation) { } public void onAnimationEnd(Animation animation) { rowView.clearAnimation(); } }); rowView.startAnimation(animation); } } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ private View CurrentView; protected void prepareDelete(final View rowView, final int positon) { //如果不是处于删除状态 if (!"half_delete".equals(((ViewHolder) rowView.getTag()).status)) { final Animation animation = (Animation) AnimationUtils .loadAnimation(rowView.getContext(), R.anim.item); animation.setFillAfter(true); ((ViewHolder) rowView.getTag()).status = "half_delete"; //赋值给成员变量 CurrentView = rowView; //添加删除按钮popup addDeleteButton(rowView, positon); rowView.startAnimation(animation); } } private void addDeleteButton(final View view, final int position) { Button button = new Button(MainActivity.this); button.setText("删除"); button.setVisibility(View.VISIBLE); pop.setContentView(button); pop.showAsDropDown(view, 560, -130); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //点击删除按钮,进行删除操作 doDelete(view, position); pop.dismiss(); CurrentView = null; } }); } protected void doDelete(final View rowView, final int positon) { if (rowView == null) { return; } if ("half_delete".equals(((ViewHolder) rowView.getTag()).status)) { final Animation animation = (Animation) AnimationUtils .loadAnimation(rowView.getContext(), R.anim.item2); animation.setDuration(0); animation.setFillAfter(true); ((ViewHolder) rowView.getTag()).status = "normal"; CurrentView = null; animation.setAnimationListener(new AnimationListener() { public void onAnimationStart(Animation animation) { } public void onAnimationRepeat(Animation animation) { } public void onAnimationEnd(Animation animation) { rowView.clearAnimation(); array.remove(positon); adapter.notifyDataSetChanged(); } }); rowView.startAnimation(animation); } } private ArrayList<User> getData() { ArrayList<User> users = new ArrayList<User>(); User user = new User(); user.logo = "http://t10.baidu.com/it/u=3485469777,1638135480&fm=56"; user.name = "1111"; user.time = "11:11"; user.sign = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; users.add(user); user = new User(); user.name = "222222"; users.add(user); user = new User(); user.name = "3333"; users.add(user); user = new User(); user.name = "44444"; users.add(user); user = new User(); user.name = "5555"; users.add(user); user = new User(); user.name = "6666"; users.add(user); user = new User(); user.name = "77777"; users.add(user); user = new User(); user.name = "88888"; users.add(user); user = new User(); user.name = "99999"; users.add(user); user = new User(); user.name = "aaaaa"; users.add(user); return users; } }
package com.example.ss.adapters; import java.util.List; import android.content.Context; import android.graphics.drawable.Drawable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import com.example.ss.R; /** * Created by xch on 2014/6/14. */ public class NewsListAdapter extends BaseAdapter { private Context mContext; private List<User> mUsers; Drawable defaultDrawable; public NewsListAdapter(Context context, List<User> users) { this.mContext = context; this.mUsers = users; defaultDrawable = mContext.getResources().getDrawable(R.drawable.ic_launcher); } @Override public int getCount() { return mUsers.size(); } @Override public Object getItem(int position) { return mUsers.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { View view = null; final ViewHolder holder; if (convertView == null) { view = LayoutInflater.from(mContext).inflate( R.layout.item_new, null); holder = new ViewHolder(); holder.headImage = (ImageView) view.findViewById(R.id.new_it_iv_head); holder.nameText = (TextView) view.findViewById(R.id.new_it_tv_name); holder.signText = (TextView) view.findViewById(R.id.new_it_tv_sign); holder.timeText = (TextView) view.findViewById(R.id.new_it_tv_time); view.setTag(holder); } else { view = convertView; holder = (ViewHolder) view.getTag(); } User user = mUsers.get(position); holder.headImage.setImageDrawable(defaultDrawable); holder.nameText.setText(user.name); holder.signText.setText(user.sign); holder.timeText.setText(user.time); return view; } public class ViewHolder { ImageView headImage; TextView nameText; TextView signText; TextView timeText; public String status; } }
package com.example.ss.adapters; public class User { public long uid; public String name; public String logo; public String time; public String sign; }
item_new.xml
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="60dp" > <RelativeLayout android:id="@+id/new_it_rl" android:layout_width="match_parent" android:layout_height="60dp" > <ImageView android:id="@+id/new_it_iv_head" android:layout_width="50dp" android:layout_height="50dp" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_alignParentTop="true" android:layout_margin="5dp" android:src="@drawable/ic_launcher" /> <TextView android:id="@+id/new_it_tv_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_marginTop="10dp" android:layout_toRightOf="@+id/new_it_iv_head" android:text="New Text" android:textSize="16sp" /> <TextView android:id="@+id/new_it_tv_sign" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/new_it_iv_head" android:layout_marginBottom="5dp" android:layout_toRightOf="@+id/new_it_iv_head" android:text="New Text" /> <TextView android:id="@+id/new_it_tv_time" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_alignParentRight="true" android:layout_alignTop="@+id/new_it_tv_name" android:layout_marginRight="130dp" android:text="New Text" /> </RelativeLayout> </FrameLayout>
<?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="300" android:fromXDelta="0%" android:fromYDelta="0" android:toXDelta="-30%p" android:toYDelta="0" />
<?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="300" android:fromXDelta="-30%p" android:fromYDelta="0" android:toXDelta="0" android:toYDelta="0" />
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:setondismisslistener pointtoposition setanimationlistener popupwindow getchildat
原文地址:http://blog.csdn.net/u013210620/article/details/47446933