我需要一些动画方面的帮助。
我正在开发一个用户将解决数学任务的简单游戏。每一轮都有60秒,我现在使用 CountDownTimer 来检查时间。我想改变背景颜色,而不是剩余时间的文本表示。请检查链接,例如。
我现在有蓝色 RelativeLayout ,我想根据剩余时间更改此布局的颜色(或者可能只是向左移动)。当游戏刚刚开始时整个布局将是蓝色的,30秒后一半的布局应该更暗,这应该从示例gif中清楚。
重要提示:用户可以使用“超级大国”来增加回合时间。当用户只有10秒结束时,他可以使用“超能力”并加上+30秒,这会影响背景动画。
你能帮我解决一下如何创造这种效果。
答案 0 :(得分:0)
只是一个想法,你可以使用两个相互重叠的背景/布局来实现这一点。
使用您的CountDownTimer,您可以使用ObjectAnimator水平翻译其中一个背景,传递转换值的时间。这将根据时间是增加还是减少来允许背景向任一方向发展。
答案 1 :(得分:-1)
你去......
我已经实现了从左到右更改视图背景颜色的代码。我做了10秒。之后您可以根据您的要求增加。
我创建了另一个视图,其宽度和高度将匹配父视图。另外,为了获得动画视图,我使用了"动画"使用过的类" TranslateAnimation"用于翻译视图的API。
同样在活动清单中,为了获得优先级的第一个视图,我使用了"提升"属性。
浏览下面的代码。
`
<?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>
`
`
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;
}
}
`