我试图同时为左右两个图像设置动画,一个是从右到左。为此我设置左图像的左边距等于其宽度的负值,右图像的左边距相同,以便它们不在视图中。 现在,在我的主要活动中,我使用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>
这是mainactivity.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);
}
}
请告诉我这是正确的或可能的方法
提前致谢
答案 0 :(得分:2)
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>
Java的文件
@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();
它确实有效。我已经测试了。