ListView
の項目の中で時々ビューをアニメーション化しようとしています。これはカスタムビューで、RelativeLayout
に拡張されています。その目的は、インターネットを含むいくつかのソースから時折情報を取得して表示することです。 新しい情報が利用可能になるたびに、新しい子ビューがプログラムによって作成されます。古いビューはカスタムビュー(RelativeLayout)からアニメーション化され、新しいビューはアニメーション化され、ViewFlipperが機能します。 このビューは通常のレイアウトに配置したときに正常に動作しますが、ListViewのアイテムに配置するときに問題があります。問題は、それがリストから1〜2回スクロールした後に再描画を停止するということです。スクリーンから出て再び戻ってくる直後です。アニメーションはもう表示されず、カスタムビューはリストとやり取りするときにのみ描画されます。 私はビューを無効にして、リストやその他のオプションを無効にしようとしましたが、これはうまくいきません...ListView内のアニメーション
何か助けていただければ幸いです。ありがとう。
私のカスタムビューで試した正確なメカニズムに似たいくつかのコードがあります(ここでは私のビューで何か問題がないかどうかを確認するためにViewFlipperを使用しています。 )
package com.test.viewflipper;
import android.app.ListActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;
import android.widget.AbsListView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.TextView;
import android.widget.ViewFlipper;
public class ViewFlipperTestActivity extends ListActivity {
/** Called when the activity is first created. */
private ViewFlipper viewFlipper;
private Animation TRANSLATE_LEFT_TO_RIGHT_VIEW_IN = new TranslateAnimation(Animation.RELATIVE_TO_SELF, -1.0f,
Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f);
private Animation TRANSLATE_LEFT_TO_RIGHT_VIEW_OUT = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f,
Animation.RELATIVE_TO_SELF, 1.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f);
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
viewFlipper = new ViewFlipper(this);
LayoutParams params = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
viewFlipper.setLayoutParams(new AbsListView.LayoutParams(params));
viewFlipper.setInAnimation(TRANSLATE_LEFT_TO_RIGHT_VIEW_IN);
viewFlipper.setOutAnimation(TRANSLATE_LEFT_TO_RIGHT_VIEW_OUT);
for (int i = 0; i < 10; i++) {
Button button = new Button(getApplicationContext());
button.setText("Button " + i);
viewFlipper.addView(button);
}
viewFlipper.setFlipInterval(1000);
viewFlipper.setAutoStart(true);
viewFlipper.startFlipping();
LayoutInflater layoutInflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
setListAdapter(new AdListAdapter(layoutInflater));
}
private class AdListAdapter extends BaseAdapter {
private LayoutInflater layoutInflater;
public AdListAdapter(LayoutInflater layoutInflater) {
this.layoutInflater = layoutInflater;
}
@Override
public int getCount() {
return 10;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
/* return the ad container for the first position */
if (position == 0) {
return viewFlipper;
}
else {
View view = layoutInflater.inflate(android.R.layout.simple_list_item_1, null);
TextView textView = (TextView) view.findViewById(android.R.id.text1);
textView.setText("Item " + position);
return view;
}
}
}
}
まあアニメーションは10秒ごとに手動で開始されます。問題は、リストに表示されているアイテムを取り出して再び戻った後で、ビューが再描画されないことです。私は私のアプリにログを入れ、アニメーションプロセスが起動されます。ただし、UIでは更新されません(再描画されません)。 – Daniel
私の質問にいくつかのコードを追加しました。 – Daniel
可能な解決策で回答を更新しました。現時点ではテストされていませんが、動作すれば教えてください;) – pablisco