1

アクティビティ間の遷移に使用すると魅力的な基本的なアニメーションがいくつかあります。

問題は、ビューフリッパーでそれらを使用すると、非常に顕著な遅延が見られることです。ここに私の活動からのコードスニペットがあります:

 private void initUI(){
    layoutInflater = LayoutInflater.from(this);
    flipViewMain = layoutInflater.inflate(R.layout.flip_view_profile_main, null);
    flipListHolder = layoutInflater.inflate(R.layout.flip_view_profile_list, null);
    flipDescriptionHolder  =  layoutInflater.inflate(R.layout.flip_view_profile_description, null);

    profileFlipper = (ViewFlipper) findViewById(R.id.profile_flipper);

    profileFlipper.addView(flipViewMain);
    profileFlipper.addView(flipListHolder);
    profileFlipper.addView(flipDescriptionHolder);

    flipInNextAnimation = AnimationUtils.loadAnimation(this, R.anim.push_left_in);
    flipOutNextAnimation = AnimationUtils.loadAnimation(this, R.anim.push_left_out);
    flipInPreviousAnimation = AnimationUtils.loadAnimation(this, R.anim.push_right_in);
    flipOutPreviousAnimation = AnimationUtils.loadAnimation(this, R.anim.push_right_out);
 }

  private void handleFlip(int position){
    if(position<currentPosition){
        profileFlipper.setInAnimation(flipInPreviousAnimation);
        profileFlipper.setOutAnimation(flipOutPreviousAnimation);
    } else if(position>currentPosition){
        profileFlipper.setInAnimation(flipInNextAnimation);
        profileFlipper.setOutAnimation(flipOutNextAnimation);
    }
    currentPosition = position;

    profileFlipper.setDisplayedChild(position);
}

すべてのアニメーションは次のようになります。

<translate android:fromXDelta="100%p" android:toXDelta="0" android:duration="300"/>
<alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="300" />

 </set>

私は何を間違っていますか?このラグをなくすにはどうしたらよいでしょうか?ViewPager を使用したほうがよいのではないかと思いましたが、アニメーションの変更に関してはあまり柔軟ではないようです。ありがとう。

4

1 に答える 1

1

どうやら問題は ViewFlipper が原因ではなかったようです。Galaxy Nexus デバイスでデバッグしているときにのみ、アニメーションの遅延に気付きました。ここで次のことがわかりました。

Galaxy Nexus は 1280 x 720 で、画面上の合計 921K ピクセルです。基本的に、Galaxy Nexus の GPU は、Infuse や S II の 2.4 倍のピクセルをフレームごとに描画する必要があります。潜在的なフレーム レートは、Infuse または Galaxy S II の約 2.4 倍になると予想されます。

それが私のアニメーションの問題の理由です。ハードウェアアクセラレーションを有効にすることで解決しました:

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if (android.os.Build.VERSION.SDK_INT >= 11) {
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
    }
    setContentView(R.layout.content);

    initUI();

}
于 2013-02-07T10:17:17.167 に答える