如何在安卓中跨相对布局的宽度翻译图像



我正在尝试同时从左到右和从右到左对两个图像进行动画处理。为此,我将左图像的左边距设置为等于其宽度的负数,而右图像的左边距相同,以便它们不在视图中。现在在我的主要活动中,我正在使用 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();

它真的有效。我已经测试过了。

最新更新