Android动画:背景颜色根据时间而变化

时间:2016-10-05 14:32:52

标签: android animation background relativelayout

我需要一些动画方面的帮助。

我正在开发一个用户将解决数学任务的简单游戏。每一轮都有60秒,我现在使用 CountDownTimer 来检查时间。我想改变背景颜色,而不是剩余时间的文本表示。请检查链接,例如。

GIF example of animation

我现在有蓝色 RelativeLayout ,我想根据剩余时间更改此布局的颜色(或者可能只是向左移动)。当游戏刚刚开始时整个布局将是蓝色的,30秒后一半的布局应该更暗,这应该从示例gif中清楚。

重要提示:用户可以使用“超级大国”来增加回合时间。当用户只有10秒结束时,他可以使用“超能力”并加上+30秒,这会影响背景动画。

你能帮我解决一下如何创造这种效果。

2 个答案:

答案 0 :(得分:0)

只是一个想法,你可以使用两个相互重叠的背景/布局来实现这一点。

使用您的CountDownTimer,您可以使用ObjectAnimator水平翻译其中一个背景,传递转换值的时间。这将根据时间是增加还是减少来允许背景向任一方向发展。

答案 1 :(得分:-1)

你去......

我已经实现了从左到右更改视图背景颜色的代码。我做了10秒。之后您可以根据您的要求增加。

我创建了另一个视图,其宽度和高度将匹配父视图。另外,为了获得动画视图,我使用了"动画"使用过的类" TranslateAnimation"用于翻译视图的API。

同样在活动清单中,为了获得优先级的第一个视图,我使用了"提升"属性。

浏览下面的代码。

  1. activity_main.xml中
  2. `

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="com.example.golevr.changebackgroundcolor.MainActivity"
        android:id="@+id/constraint">
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hello World!"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            android:elevation="10dp"/>
    
        <View
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/view"
            android:elevation="0dp"></View>
    
    </android.support.constraint.ConstraintLayout>
    

    `

    1. MainActivity.java
    2. `

      public class MainActivity extends AppCompatActivity {
      
          ConstraintLayout constraintLayout;
          View view;
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
              constraintLayout = (ConstraintLayout) findViewById(R.id.constraint);
              view = (View)findViewById(R.id.view);
      
              view.startAnimation(inFromLeftAnimation());
              constraintLayout.bringToFront();
      
          }
      
          private Animation inFromLeftAnimation() {
      
              Animation inFromRight = new TranslateAnimation(
                      Animation.RELATIVE_TO_PARENT, -1.0f,
                      Animation.RELATIVE_TO_PARENT, 0.0f,
                      Animation.RELATIVE_TO_PARENT, 0.0f,
                      Animation.RELATIVE_TO_PARENT, 0.0f);
              view.setBackgroundColor(Color.BLUE);
              inFromRight.setDuration(10000);
              inFromRight.setInterpolator(new AccelerateInterpolator());
              return inFromRight;
          }
      
      }
      

      `