我试图通过Gmail app(ICS)提供删除邮件的功能。我不想删除单元格下面的所有行向上移动并覆盖已删除的单元格。
这是工作动画:
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false" >
<translate android:fromYDelta="0%" android:toYDelta="-100%"
android:duration="@android:integer/config_mediumAnimTime"/>
<alpha android:fromAlpha="0.0" android:toAlpha="1.0"
android:duration="@android:integer/config_mediumAnimTime" />
</set>
到目前为止,我想出的就是:
public static List<View> getCellsBelow(ListView listView, int position) {
List<View> cells = new ArrayList<View>();
for (int i = position + 1; i <= listView.getLastVisiblePosition(); i++) {
cells.add(listView.getChildAt(i));
}
return cells;
}
我收集了所选细胞的可见细胞,然后在foreach中制作动画。我担心这是性能灾难。我也很难通知适配器它应该重新加载它的内容。通常我会在notifyDataSetChanged
上拨打onAnimationEnd
,但现在有几个动画一个接一个地播放。
任何建议伙伴?也许有些东西可以激发一些观点的动画?
答案 0 :(得分:6)
更新:我建议您在Android团队工作的Chet Haase查看this solution。特别是如果你没有为Android 2.3及更低版本开发。
这应该是你想要的。
list.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent,
final View view, final int position, long id) {
removeRow(view, position);
return true;
}
});
private void removeRow(final View row, final int position) {
final int initialHeight = row.getHeight();
Animation animation = new Animation() {
@Override
protected void applyTransformation(float interpolatedTime,
Transformation t) {
super.applyTransformation(interpolatedTime, t);
int newHeight = (int) (initialHeight * (1 - interpolatedTime));
if (newHeight > 0) {
row.getLayoutParams().height = newHeight;
row.requestLayout();
}
}
};
animation.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
row.getLayoutParams().height = initialHeight;
row.requestLayout();
items.remove(position);
((BaseAdapter) list.getAdapter()).notifyDataSetChanged();
}
});
animation.setDuration(300);
row.startAnimation(animation);
}
答案 1 :(得分:1)
您可以尝试我为此制作的ListView。它在Github。
答案 2 :(得分:1)
此作者的原作者在此处发布了代码:https://gist.github.com/2980593 这是来自Roman Nurik的原始Google+帖子:https://plus.google.com/113735310430199015092/posts/Fgo1p5uWZLu