Хочу перевернуть карту в моем приложении. У меня 2 ImageViews 1 Cardfront и 2 Cardback.

Моя теория ->

  1. Я меняю ширину лицевой стороны карты со 100% на 0%.
  2. Я меняю ширину обложки с 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);, он ждет ~ 7 секунд, а затем мгновенно исчезает.

Что я делаю не так?

0
Mathy 19 Фев 2016 в 16:12

2 ответа

Лучший ответ

Вы можете использовать анимацию, чтобы получить эффект флип-карты. Это руководство по анимации переворачивания карточек здесь предназначено для фрагмента, но вы можете использовать то же самое анимации для ваших просмотров, например

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);
0
Radu Ionescu 19 Фев 2016 в 13:42

Попробуйте вызвать один из них после setLayoutParams (): 1. requestLayout () 2. invalidate ()

Так как requestLayout () следует вызывать, когда позиция или границы представления в родительском макете были изменены, а invalidate () следует вызывать при изменении внешнего вида представления. Когда вы вызываете requestLayout (), тогда будут запущены методы onLayout () и onMeasure () представления, с другой стороны, когда вы вызываете invalidate (), тогда будет запущен метод onDraw ().

0
Sameeh Shkeer 19 Фев 2016 в 13:27