ListView中item刪除動畫效果
阿新 • • 發佈:2019-02-07
在android中listview控制元件使用的比較多,如果在listview上面有些動畫會增色不少,listview上面的動畫確實也不少,好多動畫基本都是國外的大神寫的。
我這個也是看了別人寫的,摘抄了下。因為自己也是個菜鳥。
首先定義一個listview中介面卡一行的佈局:
然後定義一個介面卡物件ArrayAdapter:<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <ImageButton android:id="@+id/cell_trash_button" android:layout_width="48dp" android:layout_height="48dp" android:src="@drawable/trash_can" android:scaleType="fitXY" /> <TextView android:id="@+id/cell_name_textview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical|left" android:layout_marginLeft="16dp" android:layout_weight="1" android:text="cell name" /> </LinearLayout>
然後定義個動畫監聽和動畫物件:public class MyAnimListAdapter extends ArrayAdapter<MyCell> { private LayoutInflater mInflater; private int resId; public MyAnimListAdapter(Context context, int textViewResourceId, List<MyCell> objects) { super(context, textViewResourceId, objects); this.resId = textViewResourceId; this.mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } @Override public View getView(final int position, View convertView, ViewGroup parent) { final View view; ViewHolder vh; MyCell cell = (MyCell)getItem(position); if (convertView==null) { view = mInflater.inflate(R.layout.chain_cell, parent, false); setViewHolder(view); } else if (((ViewHolder)convertView.getTag()).needInflate) { view = mInflater.inflate(R.layout.chain_cell, parent, false); setViewHolder(view); } else { view = convertView; } vh = (ViewHolder)view.getTag(); vh.text.setText(cell.name); vh.imageButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { deleteCell(view, position); } }); return view; } private void setViewHolder(View view) { ViewHolder vh = new ViewHolder(); vh.text = (TextView)view.findViewById(R.id.cell_name_textview); vh.imageButton = (ImageButton) view.findViewById(R.id.cell_trash_button); vh.needInflate = false; view.setTag(vh); } }
上面主要是getview中呼叫刪除每一個item的動畫實現,後面隨便定義一個listview物件和資料來源把這個listview顯示出來就行看到效果了。private void deleteCell(final View v, final int index) { AnimationListener al = new AnimationListener() { @Override public void onAnimationEnd(Animation arg0) { mAnimList.remove(index); ViewHolder vh = (ViewHolder)v.getTag(); vh.needInflate = true; mMyAnimListAdapter.notifyDataSetChanged(); } @Override public void onAnimationRepeat(Animation animation) {} @Override public void onAnimationStart(Animation animation) {} }; collapse(v, al); } private void collapse(final View v, AnimationListener al) { final int initialHeight = v.getMeasuredHeight(); Animation anim = new Animation() { @Override protected void applyTransformation(float interpolatedTime, Transformation t) { if (interpolatedTime == 1) { v.setVisibility(View.GONE); } else { v.getLayoutParams().height = initialHeight - (int)(initialHeight * interpolatedTime); v.requestLayout(); } } @Override public boolean willChangeBounds() { return true; } }; if (al!=null) { anim.setAnimationListener(al); } anim.setDuration(ANIMATION_DURATION); v.startAnimation(anim); }