我有以下代码:
...
<RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content"
android:layout_marginTop="8dp" android:layout_marginBottom="8dp">
<ImageView android:id="@+id/image_product"
android:layout_width="64dp" android:layout_height="64dp"
android:layout_centerVertical="true"
android:layout_marginLeft="8dp"/>
<FrameLayout android:id="@+id/view_price"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginLeft="8dp" android:layout_marginRight="8dp">
<Button style="@style/Button.Border.Green"
android:id="@+id/button_price"
android:minWidth="76dp"/>
<Button style="@style/Button.Flat.Green"
android:id="@+id/button_add_to_cart_or_customize"
android:layout_width="wrap_content"
android:minWidth="76dp"
android:minHeight="48dp"
android:textSize="13sp"/>
</FrameLayout>
<TextView android:id="@+id/text_product"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_toRightOf="@id/image_product" android:layout_toLeftOf="@id/view_price"
android:layout_centerVertical="true"
android:layout_marginLeft="16dp"
android:textAppearance="@style/TextAllerRegular.13sp.Black87per"/>
</RelativeLayout>
RecyclerView的项目布局:
changePriceButton/resetPriceButton
我想在用户点击价格时将更改价格按钮设置为“添加到购物车”,并在用户开始滚动RecyclerView时返回到价格。
当用户单击按钮并滚动recyclelerview时,按钮动画可以在中间状态停止。您将看到窗口右侧和价格按钮之间的边距,或文本“添加到购物车”而没有按钮上的右侧填充。
然后该按钮将被破坏,您可以在其上尝试TransitionManager
,但按钮将无法完全显示。
使用“Animator持续时间刻度”&gt; = 5x很容易重现此错误。
当beginDelayedTransition
已经在此视图上启动beginDelayedTransition
时,TransitionManager
似乎有问题。
另外我认为TransitionManager.endTransitions((ViewGroup) itemView)
在回收滚动时回收了RecyclerView的视图。在onBindViewHolder
开头尝试isResetPriceButton
,但没有帮助。
以下为我解决了这个问题,但我不确定。 很好地调查问题的原因。
我在RecyclerView的holder中添加了字段private boolean isResetPriceButton;
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
isResetPriceButton = false;
...
resetPriceButton(false);
}
void changePriceButton(int titleRes) {
if (isResetPriceButton) {
isResetPriceButton = false;
TransitionManager.beginDelayedTransition((ViewGroup) itemView);
buttonPrice.setVisibility(View.GONE);
buttonAddToCartOrCustomize.setVisibility(View.VISIBLE);
buttonAddToCartOrCustomize.setText(titleRes);
}
}
void resetPriceButton(boolean withTransition) {
if (!isResetPriceButton) {
isResetPriceButton = true;
if (withTransition) {
TransitionUtils.beginDelayedTransitionIfPossible((ViewGroup) itemView);
}
buttonPrice.setVisibility(View.VISIBLE);
buttonAddToCartOrCustomize.setVisibility(View.GONE);
}
}
,以防止在用户开始滚动RecycleView时尝试将按钮更改为相同的状态
setHasTransientState
我在转换期间在持有者的视图中使用transition.addListener(new Transition.TransitionListener() {
@Override
public void onTransitionStart(Transition transition) {
itemView.setHasTransientState(true);
}
@Override
public void onTransitionEnd(Transition transition) {
itemView.setHasTransientState(false);
}
@Override
public void onTransitionCancel(Transition transition) {
itemView.setHasTransientState(false);
}
@Override
public void onTransitionPause(Transition transition) {
}
@Override
public void onTransitionResume(Transition transition) {
}
});
。但是我不喜欢这个,它在转换开始时会产生额外的滚动视图。
{{ portfolio.currentValue | currency : 'AUD' : true : '4.0' }}