4

私はViewFlipperとその変換アニメーションを実装しようとしています。参照できるページはたくさんありますが、いくら試してもoutAnimationが発生することはありません。以下は私のプロジェクトで、現在翻訳アニメーションは表示されていませんが、vf.setOutAnimation ...の部分をコメントアウトすると、inAnimationアニメーションが突然機能し始めます。...どうして?

package com.example.testview;

import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.animation.AnimationUtils;
import android.widget.TextView;
import android.widget.ViewFlipper;

public class TestViewActivity extends Activity implements OnTouchListener {

    private ViewFlipper vf;
    private float firstTouchX;
    private float leaveTouchX;

@Override public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    vf = (ViewFlipper) findViewById(R.id.viewFlipper1);
    vf.setOnTouchListener(this);
}

    public boolean onTouch(View v, MotionEvent event) {

        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                    firstTouchX = event.getX();
                    break;

            case MotionEvent.ACTION_UP:
                    leaveTouchX = event.getX();

                if (this.firstTouchX - 50f > leaveTouchX) {

                    vf.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.right_in));
                    vf.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.left_out));
                    vf.showNext();
                }
                if (this.firstTouchX + 50f < leaveTouchX) {

                    vf.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.left_in));
                    vf.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.right_out));
                    vf.showPrevious();
                }
                break;
        }
        return true;
    }
}

res / anim / left_in.xml:

<?xml version="1.0" encoding="utf-8"?>
<translate 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="350" 
    android:fromXDelta="-100%p" 
    android:toXDelta="0%p"  
    android:fromYDelta="0%p"
    android:toYDelta="0%p">
</translate>

res / anim / left_out.xml:

<?xml version="1.0" encoding="utf-8"?>
<translate
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="350"
    android:fromXDelta="0%p"
    android:toXDelta="-100%p"
    android:fromYDelta="0%p"
    android:toYDelta="0%p">
</translate>

res / anim / right_in.xml:

<?xml version="1.0" encoding="utf-8"?>
<translate
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="350"
    android:fromXDelta="100%p"
    android:toXDelta="0%p"
    android:fromYDelta="0%p"
    android:toYDelta="0%p">
</translate>

res / anim / right_out.xml:

<?xml version="1.0" encoding="utf-8"?>
<translate
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="350"
    android:fromXDelta="0%p"
    android:toXDelta="100%p"
    android:fromYDelta="0%p"
    android:toYDelta="0%p">
</translate>

res / layout / main.xml

<?xml version="1.0" encoding="utf-8"?>
    <ViewFlipper
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/viewFlipper1"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >

         <include
            android:id="@+id/first"
            layout="@layout/first" />

        <include
            android:id="@+id/second"
            layout="@layout/second" />

        <include
            android:id="@+id/third"
            layout="@layout/third" />

    </ViewFlipper>

first.xml / second.xml / third.xml(独自の画像IDのみが異なります)

<?xml version="1.0" encoding="utf-8"?>
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:src="@drawable/img">
</ImageView>

大きな編集:自分の投稿に基づいて小さなプロジェクトを作成しただけで、うまくいくようです...おそらく、ディスカッションを開始するのに不要だと思ったコードを省略して問題が発生したためです。誰もが答えようとしました。私はさらに調査を行い、modがこの質問を削除しない限り、後で参照するために役立つ内訳を投稿できることを願っています。

BIG EDIT2:今日もう一度試してみましたが、うまくいきませんでした。おそらくAndroidARM2.2エミュレーターを使用したためです。ARM / Inter 2.3.3に切り替えると、機能します。

4

1 に答える 1

0

これを試して、outAnimationをinAnimationに置き換えてください。

            if (this.firstTouchX - 50f > leaveTouchX) {

                vf.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.left_out));
                vf.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.right_in));
                vf.showNext();
            }
            if (this.firstTouchX + 50f < leaveTouchX) {

                vf.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.right_out));
                vf.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.left_in));
                vf.showPrevious();
            }
            break;

そして試してみてくださいそれはうまくいくかもしれません!

于 2012-05-25T09:28:37.780 に答える