想要在我的应用中转一张卡片。我有2 ImageViews
1 Cardfront
和2 Cardback
。
我的理论 - >
- 我将卡片前端的宽度从100%更改为0%
- 我将卡片的宽度从0%更改为100%
醇>
我在google上搜索有关在运行时更改ImageView宽度的解决方案,但我找到的解决方案无效。
// Code for step 1
ViewGroup.LayoutParams params = ivBomb.getLayoutParams();
int width = params.width;
for (int i = 1; i<width; i++) {
params.width--;
ivBomb.setLayoutParams(params);
Thread.sleep(10); // To see the change
}
当我在没有Thread.sleep(10);
的情况下启动它时,它会立即消失。但是当我用Thread.sleep(10);
开始时,它会等待〜7s然后立即消失。
我做错了什么?
答案 0 :(得分:0)
尝试在setLayoutParams()之后调用其中一个: 1. requestLayout() 2. invalidate()
因为,当调整父布局中视图的位置或边界时,应该调用requestLayout(),而当更改视图的外观时应调用invalidate()。当你调用requestLayout()然后onLayout()和onMeasure()方法将被触发,另一方面当你调用invalidate()时,将触发onDraw()方法。
答案 1 :(得分:0)
您可以使用动画来获得翻转卡效果。这里的card flip animation tutorial用于片段,但您可以为视图使用相同的动画,例如
Animation cardFlipRightOut = AnimationUtils.loadAnimation(this, R.anim.card_flip_right_out);
cardFlipRightOut.setAnimationListener(new Animation.AnimationListener(){
@Override
public void onAnimationStart(Animation arg0) {
}
@Override
public void onAnimationRepeat(Animation arg0) {
}
@Override
public void onAnimationEnd(Animation arg0) {
Animation cardFlipLeftIn = AnimationUtils.loadAnimation(this, R.anim.card_flip_left_in);
cardFrontView.startAnimation(cardFlipLeftIn);
}
});
cardBackView.startAnimation(cardFlipRightIn);