如何在运行时更改ImageView的宽度?

时间:2016-02-19 13:12:11

标签: java android

想要在我的应用中转一张卡片。我有2 ImageViews 1 Cardfront和2 Cardback

我的理论 - >

  
      
  1. 我将卡片前端的宽度从100%更改为0%
  2.   
  3. 我将卡片的宽度从0%更改为100%
  4.   

我在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然后立即消失。

我做错了什么?

2 个答案:

答案 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);