Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android高仿QQ消息滑動刪除(附源碼)

Android高仿QQ消息滑動刪除(附源碼)

編輯:關於Android編程

其實主要用的是算法以及對ListView的把控.   一下是適配器的類   package com.fay.adapter;   import java.util.ArrayList; import java.util.List; import java.util.Map;   import android.app.Activity; import android.content.Context; import android.graphics.Point; import android.util.Log; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnTouchListener; import android.view.ViewGroup; import android.view.animation.Animation; import android.view.animation.Animation.AnimationListener; import android.view.animation.AnimationUtils; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast;   import com.fay.activity.MessageActivity; import com.fay.message.R;   /**  * the adapter of the ListView  * @author Fay   * {@link [email protected]}  */ public class ListMessageAdapter extends BaseAdapter {     private String TAG = "ListMessageAdapter";     private Context context = null;     private Holder holder = null;     private LayoutInflater inflater = null;       // the last position clicked     private int mLastPosition = -1;       // check whether a touch action is finish     private boolean loadFinish = false;       // the position of click and move, start and end point     private Point startPoint, endPoint;       // the animation of removing the item     private Animation animation = null;       // the children item is common     private final int TYPE_ITEM = 0;       // the children item is searching     private final int TYPE_SEARCH = 1;       // the count of children item's type     private final int TYPE_COUNT = TYPE_SEARCH + 1;       // data container     private List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();       public ListMessageAdapter(Context context) {         this.context = context;         this.inflater = (LayoutInflater) context                 .getSystemService(Context.LAYOUT_INFLATER_SERVICE);         this.startPoint = new Point();         this.endPoint = new Point();         animation = AnimationUtils.loadAnimation(context, R.anim.push_out);     }       public void setData(ArrayList<Map<String, Object>> list) {         this.list = list;         notifyDataSetChanged();     }       public void setDataTemp(List<Map<String, Object>> list) {         this.list = list;         notifyDataSetChanged();     }       public void clearData() {         list.clear();         notifyDataSetChanged();     }       public int getCount() {         return list.size();     }       @Override     public Object getItem(int position) {         return list.get(position);     }       @Override     public long getItemId(int position) {         return position;     }       @Override     public int getItemViewType(int position) {         return position == 0 ? TYPE_SEARCH : TYPE_ITEM;     }       @Override     public int getViewTypeCount() {         return TYPE_COUNT;     }       @Override     public View getView(int position, View convertView, ViewGroup parent) {         int type = getItemViewType(position);         if (null == convertView) {             holder = new Holder();             switch (type) {             case TYPE_SEARCH:                 convertView = inflater.inflate(R.layout.search, null);                 holder.searchview = (LinearLayout) convertView                         .findViewById(R.id.search);                 break;             case TYPE_ITEM:                 convertView = inflater                         .inflate(R.layout.list_item_message, null);                 holder.linearlayout = (LinearLayout) convertView                         .findViewById(R.id.message_linear);                 holder.content = (TextView) convertView                         .findViewById(R.id.message_detail);                 holder.delete = (TextView) convertView                         .findViewById(R.id.message_delete);                 break;             }             convertView.setTag(holder);         } else {             holder = (Holder) convertView.getTag();         }           final int chickPosition = position;           switch (type) {         case TYPE_SEARCH:             // hidden the top view             holder.searchview.setOnClickListener(new OnClickListener() {                 @Override                 public void onClick(View v) {                     MessageActivity.hiddenTop();                 }             });             break;         case TYPE_ITEM:             holder.content.setText("消息" + list.get(chickPosition).get("index") + ":你好哦,我想你咯");             final int finalPosition = position;             if (position == mLastPosition) {                 holder.delete.setVisibility(View.VISIBLE);             } else {                 holder.delete.setVisibility(View.GONE);             }               // 刪除             final View view = holder.linearlayout;               holder.delete.setOnClickListener(new OnClickListener() {                 @Override                 public void onClick(View v) {                       view.startAnimation(animation);                     animation.setAnimationListener(new AnimationListener() {                         @Override                         public void onAnimationStart(Animation arg0) {                         }                           @Override                         public void onAnimationRepeat(Animation arg0) {                         }                           @Override                         public void onAnimationEnd(Animation arg0) {                             list.remove(chickPosition);                             mLastPosition = -1;                             notifyDataSetChanged();                         }                     });                 }             });               holder.linearlayout.setOnTouchListener(new OnTouchListener() {                   public boolean onTouch(View v, MotionEvent event) {                     switch (event.getAction()) {                     case MotionEvent.ACTION_DOWN:                         loadFinish = false;                         startPoint.set((int) event.getX(), (int) event.getY());                         break;                     case MotionEvent.ACTION_MOVE:                         endPoint.set((int) event.getX(), (int) event.getY());                         if (Math.abs(endPoint.x - startPoint.x) > 30) {                             if (loadFinish == false) {                                 loadFinish = true;                                 if (finalPosition != mLastPosition) {                                     mLastPosition = finalPosition;                                 } else {                                     mLastPosition = -1;                                 }                                 notifyDataSetChanged();                             } else {                                 return true;                             }                             return true;                         }                         if (Math.abs(endPoint.y - startPoint.y) > 30) {                             return false;                         }                         break;                     case MotionEvent.ACTION_UP:                         break;                     }                     return false;                 }             });               holder.linearlayout.setOnClickListener(new OnClickListener() {                 @Override                 public void onClick(View v) {                     if (mLastPosition != -1) {                         mLastPosition = -1;                         notifyDataSetChanged();                     } else {                         Toast.makeText(context, "您點擊了 -> " + chickPosition, 2000).show();                     }                 }             });             break;         }         return convertView;     }       private class Holder {         TextView content;         TextView delete;         LinearLayout linearlayout;         LinearLayout searchview;     }   }
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved