我确实在动画三个列表视图方面存在严重问题,动画流程如下图所示
这是我的布局文件
<ListView android:id="@+id/categoriesList"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layerType="hardware">
</ListView>
<ListView android:id="@+id/subCategoriesList"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layerType="hardware">
</ListView>
<ListView android:id="@+id/productsList"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layerType="hardware">
</ListView>
这是我的代码
项目点击监听器上的list1的
long time = AnimationUtils.currentAnimationTimeMillis();
collapseSize = (int)(categoriesListView.getMeasuredWidth() / 4);
ObjectAnimator animator = new ObjectAnimator();
animator.setTarget(subCategoriesListView);
animator.setPropertyName("translationX");
animator.setFloatValues(3*collapseSize,0);
animator.setStartDelay(time);
animator.setDuration(1000);
animator.addUpdateListener(ShopFragment.this);
ValueAnimator.ofObject(new WidthEvaluator(categoriesListView), categoriesListView.getWidth(),collapseSize).setDuration(1000).start();
animator.start();
for list2 onItemClick Listener
ObjectAnimator animator = new ObjectAnimator();
animator.setTarget(productsListView);
animator.setPropertyName("translationX");
animator.setFloatValues(collapseSize,0);
animator.setStartDelay(time);
animator.setDuration(1000);
ValueAnimator.ofObject(new WidthEvaluator(categoriesListView),
categoriesListView.getWidth(),0).setDuration(1000).start();
ValueAnimator.ofObject(new WidthEvaluator(subCategoriesListView), subCategoriesListView.getWidth(),collapseSize).setDuration(1000).start();
animator.start();
这是宽度评估器
private class WidthEvaluator extends IntEvaluator {
private View v;
public WidthEvaluator(View v) {
this.v = v;
}
@Override
public Integer evaluate(float fraction, Integer startValue,
Integer endValue) {
int num = (Integer)super.evaluate(fraction, startValue, endValue);
ViewGroup.LayoutParams params = v.getLayoutParams();
params.width = num;
v.setLayoutParams(params);
return num;
}
}
用户按后退按钮可以反转动画。主要问题是动画根本不流畅,只是跳到了新的位置。任何人都可以帮我解决这个问题吗?
注意:如果重要,那些列表视图位于片段内,而不是活动。另外,我使用九个库来向后兼容。
答案 0 :(得分:0)
我不太确定你想要实现的目标,但我认为可以通过布局动画更简单地完成。我建议类似以下布局:
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:animateLayoutChanges="true"
android:orientation="horizontal">
<ListView android:layout_width="100dp" ... />
<ListView android:layout_width="300dp" ... />
<ListView android:layout_width="300dp" ... />
</LinearLayout>
所以这是一个包含所有ListView的水平LinearLayout。请注意LinearLayout中的animateLayoutChanges设置。这意味着如果您在布局中调整大小或添加/删除视图,它将为您设置动画更改动画。现在,您可以设置第一个ListView的宽度,或将其设置为Visibility.GONE,它应该为您设置更改动画。您可以根据需要对其他ListView执行类似的操作。