行のアニメーションに関する多くのチュートリアルを読みましたが、それらはすべて、選択した行をアニメーション化する方法を説明しています。なんとかできました。しかし、問題があります。行がアニメーションで削除されると、アダプターからデータを削除し、notifyDataSetChanged(); を呼び出します。行 (削除された行の下) は、アニメーションなしで上に移動します。これらの行のアニメーションを実現するにはどうすればよいですか? スムーズに滑り上がらせたい。
質問する
1773 次
1 に答える
2
アイテムのクリック時にリスト アイテムを削除します。このコードが役立つことを願っています
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
final int position, long id) {
// TODO Auto-generated method stub
Animation anim = AnimationUtils.loadAnimation(view.getContext(),
android.R.anim.slide_out_right);
anim.setDuration(500);
view.startAnimation(anim);
new Handler().postDelayed(new Runnable() {
public void run() {
strings.remove(position);
mAdapter.notifyDataSetChanged();
}
}, anim.getDuration());
}
});
アップデート
notifydatasetChanged() が呼び出されたときに機能するアーキテクチャ フレームワークに注意してください。
- getView メソッドが呼び出されます
- get view を呼び出すと、リスト ビューのすべての行が再構築されます。
あなたの場合、getView メソッドをアニメーション化する必要があります (これは、notifydatasetchanged のアクションで再度呼び出されます)。解決策は次のとおりです。
/**
* Hear strings is the data set
*/
@Override
public View getView(final int position, View convertView,
ViewGroup parent) {
final String str = this.strings.get(position);
final Holder holder;
if (convertView == null) {
convertView = mInflater.inflate(
android.R.layout.simple_list_item_1, null);
convertView.setBackgroundColor(0xFF202020);
holder = new Holder();
holder.textview = (TextView) convertView
.findViewById(android.R.id.text1);
holder.textview.setTextColor(0xFFFFFFFF);
convertView.setTag(holder);
} else {
holder = (Holder) convertView.getTag();
}
holder.textview.setText(str);
Animation animation = null;
animation = new ScaleAnimation((float) 1.0, (float) 1.0, (float) 0,
(float) 1.0);
animation.setDuration(750);
convertView.startAnimation(animation);
animation = null;
return convertView;
}
機能するかどうかを確認し、役に立った/役に立ったかどうかをお知らせください。
于 2013-01-15T06:23:05.530 に答える