0
点赞
收藏
分享

微信扫一扫

Android 系列 6.24制作视图


6.24制作视图
问题
您希望View组件摇动几秒钟,以吸引用户的注意。

在XML中创建动画,然后调用View对象的startAnimation()方法,使用方便路由loadAnimation()方法加载XML。
讨论
动画规范在anim目录中的XML文件中创建。在这个例子中,我们希望文本输入字段能够从左到右摇动(模仿一个人从一侧到另一侧摇头,这意味着世界许多地方的“不”或“我不同意” )或上下(一个人同意点头)。因此,我们创建两个动画,horizo​​ntal.xml和vertical.xml。这里是horizo​​ntal.xml:

<?xml version="1.0" encoding="utf-8"?>
<translate
xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="0"
android:toXDelta="10"
android:duration="1000"
android:interpolator="@anim/cycler"
/>

文件vertical.xml是相同的,除了它使用fromYDelta和toYDelta。


Interpolator是驱动动画的函数 - 包含在另一个文件cycler.xml中,如下所示:


<?xml version="1.0"?>
<cycleInterpolator
xmlns:android="http://schemas.android.com/apk/res/android"
android:cycles="5"/>


要将两个动画之一应用于View组件,需要对其进行引用。当然,你可以使用常见的findViewById(R.id. *)。你也可以使用Activity方法getCurrentFocus()如果你正在处理当前输入(焦点)视图组件;这避免了耦合到特定组件的名称,如果您知道您的动画将始终适用于当前输入对象。在我的代码中,我知道这是真的,因为动画启动是在一个onClick()方法。或者,您可以使用传递到onClick()方法的视图,但这将使按钮摇动,而不是文本字段。


我不会显示整个应用程序,但这里是onClick()方法,包含所有的动画代码(见例6-29):


实例6-29。动画代码



@Override
public void onClick(View v) {
String answer = answerEdit.getText().toString();
if ("yes".equalsIgnoreCase(answer)) {
getCurrentFocus().startAnimation(
AnimationUtils.loadAnimation(getApplicationContext(),
R.anim.vertical));
return;
}
if ("no".equalsIgnoreCase(answer)) {
getCurrentFocus().startAnimation(
AnimationUtils.loadAnimation(getApplicationContext(),
R.anim.horizontal));
return;
}
Toast.makeText(this, "Try to be more definite, OK?",
Toast.LENGTH_SHORT).show();
}


振动效果便于将用户的注意力吸引到不正确的输入,但是它可以容易地过度。使用明智!


举报

相关推荐

0 条评论