Android动画图像视图

Android动画图像视图,android,animation,imageview,Android,Animation,Imageview,我有4个图像视图需要从右向左移动。这是我的动画示例视频: 以下是我正在编写的代码: private void getCorrectObject() { List<Integer> objects = new ArrayList<Integer>(); for(int arr : images){ objects.add(arr); } // Shuffle the collection Collection

我有4个图像视图需要从右向左移动。这是我的动画示例视频:

以下是我正在编写的代码:

   private void getCorrectObject() {

    List<Integer> objects = new ArrayList<Integer>();
    for(int arr : images){
        objects.add(arr);
    }

    // Shuffle the collection
    Collections.shuffle(objects);

    iv.add((ImageView) findViewById(R.id.txtStage4_object1));
    iv.add((ImageView) findViewById(R.id.txtStage4_object2));
    iv.add((ImageView) findViewById(R.id.txtStage4_object3));
    iv.add((ImageView) findViewById(R.id.txtStage4_object4));

    Collections.shuffle(iv);

    iv.get(0).setImageResource(images[0]); // Correct Image
    iv.get(1).setImageResource(images[1]); 
    iv.get(2).setImageResource(images[2]); 
    iv.get(3).setImageResource(images[3]); 

    Animation accelerate = AnimationUtils.loadAnimation(this, R.anim.accelerate_2);
    //accelerate.setRepeatCount(-1);
    //accelerate.setRepeatMode(Animation.REVERSE);

    iv.get(0).startAnimation(accelerate);
    iv.get(1).startAnimation(accelerate);
    iv.get(2).startAnimation(accelerate);
    iv.get(3).startAnimation(accelerate);

    for (int i = 0; i < tagList.length; i++) { 
        iv.get(i).setTag(tagList[i]); 
        iv.get(i).setOnTouchListener(new MyTouchListener()); 

    } 



}
private void getCorrectObject(){
列表对象=新的ArrayList();
用于(int arr:图像){
对象。添加(arr);
}
//洗牌
集合。洗牌(对象);
iv.add((ImageView)findViewById(R.id.txtStage4_object1));
iv.add((ImageView)findViewById(R.id.txtStage4_object2));
iv.add((ImageView)findViewById(R.id.txtStage4_object3));
iv.add((ImageView)findViewById(R.id.txtStage4_object4));
收藏。洗牌(四);
iv.get(0).setImageResource(图像[0]);//正确的图像
iv.get(1).setImageResource(图像[1]);
iv.get(2).setImageResource(图像[2]);
iv.get(3).设置图像资源(图像[3]);
动画加速=AnimationUtils.loadAnimation(this,R.anim.accelerate_2);
//加速。setRepeatCount(-1);
//加速。设置重复模式(动画。反转);
iv.get(0)、startAnimation(加速);
iv.get(1)启动(加速);
iv.get(2).启动(加速);
iv.get(3).启动(加速);
对于(inti=0;i
XML:



但它没有像我预期的那样。有什么想法吗?我真的很感激。谢谢。

这取决于每个
图像视图的容器布局,但您的问题很可能是:;您需要对动画的起点进行一些修改

使用
-100%
表示从距离my(ImageView)宽度左侧的x位置开始,然后向右移动(到
0%
,或当前布局位置)

既然您提到从右向左移动,我们可能首先要删除减号,然后执行
100%
->
0%
,这是一种从右向左的移动

您可能还希望使此位置相对于父视图(可能与屏幕宽度相匹配),即
100%p
,它将从父视图边界之外的偏移开始

因此,您可能需要做的就是修改动画XML,如下所示:

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false" >

    <translate
        android:duration="200"
        android:fromXDelta="100%p"
        android:fromYDelta="0%"
        android:toXDelta="0%"
        android:toYDelta="0%" />

</set>


您目前得到的结果是什么?根据视频判断,我会用帆布做。(海盗物品?啊!)@DanielMonteiro我让它从右向左移动,但它只是停留在屏幕上,并没有消失在左侧。嗨,谢谢你的回答,但是我怎样才能让它在屏幕上消失并再次出现?如果这对你不起作用,你可能需要提供更多关于你的布局的信息,因为此动画应在屏幕外启动视图(除非
ImageView
s的父视图未填充屏幕宽度),并将其移回屏幕上的原始位置。
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false" >

    <translate
        android:duration="200"
        android:fromXDelta="100%p"
        android:fromYDelta="0%"
        android:toXDelta="0%"
        android:toYDelta="0%" />

</set>