我正在尝试同时从左到右和从右到左对两个图像进行动画处理。为此,我将左图像的左边距设置为等于其宽度的负数,而右图像的左边距相同,以便它们不在视图中。现在在我的主要活动中,我正在使用 translationX 翻译它们,但什么也没发生。
这是 xml 文件
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/rLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg"
tools:context="com.example.BeX.MainActivity" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="200dp"
android:layout_height="133dp"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:src="@drawable/logo" />
<ImageView
android:id="@+id/left"
android:layout_width="100dp"
android:layout_height="75dp"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_marginLeft="-100dp"
android:src="@drawable/left" />
<ImageView
android:id="@+id/right"
android:layout_width="114dp"
android:layout_height="75dp"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_marginRight="-114dp"
android:src="@drawable/right" />
</RelativeLayout>
这是主要活动.java
import android.app.Activity;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.RelativeLayout;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(R.style.AppBaseTheme1);
setContentView(R.layout.activity_main);
RelativeLayout r = (RelativeLayout)findViewById(R.id.rLayout);
ImageView left = (ImageView)findViewById(R.id.left);
ImageView right = (ImageView)findViewById(R.id.right);
left.animate().translationX(r.getWidth()).setDuration(2000);
right.animate().translationX(-r.getWidth()).setDuration(2000);
}
}
请告诉我正确的或可能的方法是什么
提前致谢
Android中有两种基本类型的动画。
第一个。
要对翻译进行动画处理,请使用以下示例:
TranslateAnimation r = new TranslateAnimation(0,0,0,200);
r.setDuration(2000L);
r.setRepeatCount(0);
r.setFillAfter(true);
view.startAnimation(r);
第二个。
在您的情况下,您使用ViewPropertyAnimator
类。这是动画在Android中的第二次实现。 left.animate().translationX(r.getWidth()).setDuration(2000)
在您的情况下,您已经设置了对象动画器,但尚未启动它。
试试这个: left.animate().translationX(r.getWidth()).setDuration(2000).start()
:)
编辑这必须有效:
.XML:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/rLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@null">
<ImageView
android:id="@+id/imageView1"
android:layout_width="200dp"
android:layout_height="133dp"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:src="@drawable/aqu" />
<ImageView
android:id="@+id/left"
android:layout_width="100dp"
android:layout_height="75dp"
android:src="@drawable/ar" />
<ImageView
android:id="@+id/right"
android:layout_width="114dp"
android:layout_height="75dp"
android:src="@drawable/ari" />
</RelativeLayout>
爪哇文件
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.dat);
RelativeLayout r = (RelativeLayout)findViewById(R.id.rLayout);
ImageView left = (ImageView)findViewById(R.id.left);
ImageView right = (ImageView)findViewById(R.id.right);
float distance = 300.f;
TranslateAnimation anim = new TranslateAnimation(0,0,0,distance);
anim.setFillAfter(true);
anim.setDuration(12000L);
left.startAnimation(anim);
}
但无论如何,如果你想使用你的IDE进行动画处理,写这个:
ObjectAnimator anim0 = ObjectAnimator.ofFloat(right, "translationX", 0,300);
anim0.setDuration(10000L);
anim0.start();
它真的有效。我已经测试过了。