模仿android4.0的 通知栏 listview 滑动删除 item ,有滑动动画。

    xiaoxiao2022-06-29  52

    转载自http://blog.csdn.net/michael_yy/article/details/8031808

    在QQ群里,很多朋友问如何实现android4.0的通知栏里面的listview滑动删除一个item的效果,我这里简单实现了一下,看图吧(一图胜千言)。

    效果图片

    实现思路

    思路:1、给listview添加一个滑动监听事件(在该事件中获得滑动的位置,从而获得listview的item)。

                 2、让这个item播放一个动画(从左滑动到右)

                 3、item的动画播放完毕后删除item

    代码详情

    代码如下 MainActivity.java :(PS: 很简单,没有什么技术含量,老鸟飞过,勿喷。)

    [java]  view plain  copy package com.yangfuhai.animation1;      import java.util.ArrayList;      import android.app.ListActivity;   import android.os.Bundle;   import android.view.MotionEvent;   import android.view.View;   import android.view.View.OnTouchListener;   import android.view.animation.Animation;   import android.view.animation.Animation.AnimationListener;   import android.view.animation.AnimationUtils;   import android.widget.AdapterView;   import android.widget.ArrayAdapter;   import android.widget.ListView;   import android.widget.Toast;   /**   * @title 模仿android 4.0 通知栏动画   * @description listview 滑动删除item   * @company 探索者网络工作室(www.tsz.net)   * @author michael Young (www.YangFuhai.com)   * @version 1.0   * @created 2012-9-29   */   public class MainActivity extends ListActivity {       private ArrayList<String> array;       private ArrayAdapter<String> adapter;                 @Override       public void onCreate(Bundle savedInstanceState) {           super.onCreate(savedInstanceState);           ListView listView = getListView();           array = new ArrayList<String>();           String aa[] = { "items1""item2""items3""item4""items5",                   "item6""items7""item8""items9""item10""items11",                   "item12" };           for (int i = 0; i < aa.length; i++) {               array.add(aa[i]);           }           adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, array);           listView.setAdapter(adapter);                 /**           * 添加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 && Math.abs(x - upx) > 10) {                           View v = ((ListView) view).getChildAt(position1);                           removeListItem(v,position1);                       }                   }                   return false;               }              });                      /**           * listview 的item 点击事件           */           listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {                  @Override               public void onItemClick(AdapterView<?> parent, View rowView,int positon, long id) {                   Toast.makeText(rowView.getContext(), "你点击了第" + positon +"位置的item",Toast.LENGTH_SHORT).show();   //              removeListItem(rowView, positon);               }           });       }                 /**       * 删除item,并播放动画       * @param rowView 播放动画的view       * @param positon 要删除的item位置       */       protected void removeListItem(View rowView, final int positon) {                      final Animation animation = (Animation) AnimationUtils.loadAnimation(rowView.getContext(), R.anim.item_anim);           animation.setAnimationListener(new AnimationListener() {               public void onAnimationStart(Animation animation) {}                  public void onAnimationRepeat(Animation animation) {}                  public void onAnimationEnd(Animation animation) {                   array.remove(positon);                   adapter.notifyDataSetChanged();                   animation.cancel();               }           });                         rowView.startAnimation(animation);          }   }  

    动画文件 item_anim.xml :

    [html]  view plain  copy <?xml version="1.0" encoding="utf-8"?>   <translate xmlns:android="http://schemas.android.com/apk/res/android"       android:duration="800"       android:fromXDelta="0"       android:fromYDelta="0"       android:toXDelta="800"       android:toYDelta="0" />  

    后记

     这个只是一个demo,可能离商用还有一定的距离,我只是给了各位朋友的一些思路,希望通过这个思路能举一反三。          转载请注明出处。http://blog.csdn.net/michael_yy/article/details/8031808 或 http://www.yangfuhai.com(个人博客)稍后我会打包代码大家下载。

    代码下载

       下载地址:http://download.csdn.net/detail/michael_yy/4608178
    转载请注明原文地址: https://ju.6miu.com/read-1125386.html

    最新回复(0)