0

ListViewにアニメーションを追加しようとしています。getView()を使用してリストにいくつかのビューを描画しています。すべて正常に動作します。

public View getView(int position, View convertView, ViewGroup parent) { }

ユーザーがリストセルをクリックしたときにアニメーションを追加しようとしています。すべてのリストセルが左にスライドし、新しいデータが同時に右から取得されます。つまり、セルデータが左に移動し、同時に新しいデータが右側から取得されます。

OnItemClickListenerに次のコードを実装しました

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
    Animation slideOutAnimation=AnimationUtils.loadAnimation(this, R.anim.slide_out);
    slideOutAnimation.setDuration(900);

    Animation slideInAnimation=AnimationUtils.loadAnimation(this, R.anim.slide_in);
    slideInAnimation.setDuration(500);

    listView.startAnimation(slideOutAnimation);

    new Handler().postDelayed(new Runnable() {

    @Override
    public void run() {
        data = newData();
        listView.startAnimation(slideInAnimation);
        myAdapterClass.notifyDataSetChanged();
    }
    }, slideOutAnimation.getDuration());
}
};

上記のコードは機能していますが、希望の出力が得られません。アニメーションを変更しているときに空のビューが1つ表示されます。

左スライディングアニメーションの開始---空のビュー----右スライディングアニメーションの開始

空のビュー(しばらくの間空の画面が表示される)が来る理由がわからないので、アニメーションの時間とハンドラーで遊んだことがありますが、運がありません。

その空のビューを削除する方法は?この出力を達成する方法は?

左スライディングアニメーション開始(データ移動)(同時に右からのデータ)右スライディングアニメーション開始

4

2 に答える 2

4

ユーザーがリストセルをクリックしたときにアニメーションを追加しようとしています。すべてのリストセルが左にスライドし、新しいデータが同時に右から取得されます。つまり、セルデータが左に移動し、同時に新しいデータが右側から取得されます。

コードは意図したとおりに機能しますが、ListView最初に左にスライドしてアニメーション化し、最初のアニメーションが終了した直後にスライドをアニメーション化する単一のウィジェットを使用しているため、意図したとおりに機能しません。

ViewFlipper含む2つを使用してみてくださいListViews(1つは表示され、もう1つは新しいデータに付属するものになります)。ViewFlipperinおよびアニメーション)にアニメーションを設定してoutから、リストアイテムをクリックして次の操作を行います。

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
      data = newData();
      //set the data for the second list, which currently isn't visible 
      secondListViewAdapter.notifyDataSetChanged();
      viewFlipper().showNext(); //show the next list with animation
}
于 2012-12-08T13:25:51.450 に答える
0

android:fromXDeltaまたはalpha値を編集して、アニメーションの動作を変更できます。

slideout.xml

<?xml version="1.0" encoding="utf-8"?>

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="-100%p" android:toXDelta="-100%p" android:duration="@android:integer/config_shortAnimTime"/>

    <alpha android:fromAlpha="1.0" android:toAlpha="0.0"
            android:duration="@android:integer/config_mediumAnimTime" />
</set>

slidein.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="-100%p" android:toXDelta="0" android:duration="@android:integer/config_shortAnimTime"/>

    <alpha android:fromAlpha="0.0" android:toAlpha="1.0"
            android:duration="@android:integer/config_mediumAnimTime" />
</set>
于 2012-12-08T13:39:41.433 に答える