我一直在尝试实现ViewFlipper及其翻译动画。我可以参考很多页面,但无论我尝试了多少,我都看不到动画的发生。下面是我的项目,目前没有看到翻译动画,但如果我评论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 /动画/ 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 /动画/ 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 /动画/ 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 /动画/ 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 /布局/ 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>
BIG EDIT :我只是根据我的帖子建立一个较小的项目,它似乎有效...也许通过省略一些我认为没有必要开始讨论的代码导致我的问题....如果有人试图回答,我真的很抱歉。我会做一个更多的调查,希望我可以发布可用于以后引用的细分,除非mods删除这个问题。
BIG EDIT2 :今天我再试一次,但它没有用,大概是因为我使用的是Android ARM 2.2仿真器。一旦我切换到ARM / Inter 2.3.3,它就可以工作了。
答案 0 :(得分: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;
然后试试它可能有效!