Android动画副作用:按钮在动画颜色时改变其形状

时间:2016-10-22 12:59:25

标签: android

我在下面发布的所有代码都是我想要的,只是把它作为参考,也许是想要实现类似功能的人。它很简单,评论很好。

所以在那里,我正在开发一个应用程序,其中我有几个基于xml drawable资源动态创建的圆形按钮,如下所示:

00:00:00

它用于创建存储在数组(<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <corners android:radius="25dp" /> <solid android:color="#0000FF" /> <padding android:left="0dp" android:top="0dp" android:right="0dp" android:bottom="0dp" /> <size android:width="50dp" android:height="50dp" /> </shape> )中的按钮,如下所示。 (如你所见,我在屏幕上随机放置按钮)。它工作正常:

gameButtons

然后我想将动画应用于这些按钮。动画只是通过改变颜色几次使按钮闪烁(蓝色 - >黄色 - >蓝色 - > ...) 这个动画也很好(做我想要的)

for(int i = 0; i < (numberOfButtons); i++)
        {
        //create a button:
        Button oneBtn = new Button(this);

        //get layout reference:
        RelativeLayout rl = (RelativeLayout) findViewById(R.id.game_window);
        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(btnSize, btnSize);

        //get screen size:
        Display display = getWindowManager().getDefaultDisplay();
        Point size = new Point();
        display.getSize(size);
        int width = size.x;
        int height = size.y;

        //randomize button's position:
        Random r = new Random();
        int randX = r.nextInt(height - btnSize);
        int randY = r.nextInt(width - btnSize);

        params.leftMargin = randY;
        params.topMargin = randX;

        //set button's parameteres:
        oneBtn.setId(i);
        oneBtn.setText(String.valueOf(i));

        //make the button round, based on drawable/buttonshape.xml:
        oneBtn.setBackgroundResource(R.drawable.buttonshape);

        //add button to the view:
        gameButtons[i] = oneBtn;
        rl.addView(oneBtn, params);


        }

按钮按我想要的方式闪烁,但事实是,当我调用private void changeButtonColor(final Button button){ int animationTime = 800; //set colors rgb->int int blueInt = Color.rgb(0,0,255); int yellowInt = Color.rgb(255,255,0); //craete an animation: ValueAnimator anim = new ValueAnimator(); anim.setIntValues(blueInt, yellowInt, blueInt); anim.setEvaluator(new ArgbEvaluator()); anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator valueAnimator) { //animate button's color: button.setBackgroundColor((Integer)valueAnimator.getAnimatedValue()); } }); //final settings to animation an start: anim.setInterpolator(new LinearInterpolator()); anim.setDuration(animationTime); anim.start(); } 时,我的按钮会将其形状变为正方形。

似乎上面的动画会覆盖changeButtonColor()所做的事情但是,我试图通过将setBackgroundResource()放在动画中但没有结果来以多种方式阻止这种情况。

如何消除这种副作用?

1 个答案:

答案 0 :(得分:0)

实际上,我不知道这种行为的原因,但我已经实施了一种解决方法。我正在改变背景资源,而不是动画颜色变化。

所以我定义了另一个资源,比如蓝色按钮,但颜色为黄色:

QTabBar

然后我只是动画资源更改:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
<corners
    android:radius="25dp"
    />
<solid
    android:color="#FFFF00"
    />
<padding
    android:left="0dp"
    android:top="0dp"
    android:right="0dp"
    android:bottom="0dp"
    />
<size
    android:width="50dp"
    android:height="50dp"
    />
</shape>
无论如何,谢谢你的帮助