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 倍。预计 Galaxy Nexus 的潜在帧速率大约是 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 回答