我有一个ViewFlipper,它应该对一个手势作出反应,但事实并非如此。Android ViewFlipper没有翻转
活动
@Override
public void onCreate(Bundle savedInstanceState) {
...
listView = this.getListView();
detector = new GestureDetector(this, new FlingGestureListener(listView));
...
}
FlingGestureListener
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
int pos = source.pointToPosition(Math.round(e1.getX()), Math.round(e1.getY()));
View v = source.getChildAt(pos - source.getFirstVisiblePosition());
System.out.println("fling: x=" + velocityX + " y=" + velocityY);
try {
IFlingable flingable = (IFlingable) v;
if(velocityY > -200 && velocityY < 200) {
if(velocityX < 0)
flingable.fling(IFlingable.RIGHT_TO_LEFT);
else if(velocityX > 0)
flingable.fling(IFlingable.LEFT_TO_RIGHT);
}
} catch(Exception e) {}
return false;
}
查看与ViewFlipper它实现IFlingable
public void fling(int direction) {
System.out.println("flip: " + direction);
switch(direction) {
case IFlingable.LEFT_TO_RIGHT:
System.out.println("piep");
GUIHelper.setAnimationSlideLeftToRight(context, switcher);
switcher.showNext();
break;
case IFlingable.RIGHT_TO_LEFT:
System.out.println("pup");
GUIHelper.setAnimationSlideRightToLeft(context, switcher);
switcher.showPrevious();
break;
}
}
布局
<ViewFlipper android:id="@+id/viewSwitcher"
android:layout_height="wrap_content"
android:layout_width="match_parent" android:layout_weight="1"
android:inAnimation="@anim/slide_in_left"
android:outAnimation="@anim/slide_out_right">
<LinearLayout android:layout_height="wrap_content"
android:layout_width="match_parent" android:orientation="vertical">
...
</LinearLayout>
...
</ViewFlipper>
登录
fling: x=2542.3613 y=95.877945
flip: 0
piep
我得到正确的日志信息等等ViewFlipper被执行的showNext(),但它不会改变其对GUI视图。我错过了什么吗?我有一个ViewSwitcher而不是Flipper的布局,而且这个布局可以工作。
编辑:
下面是缺少类:
public class GUIHelper {
...
public static void setAnimationSlideLeftToRight(Context context, ViewAnimator switcher) {
Animation in = AnimationUtils.loadAnimation(context, R.anim.slide_in_left);
Animation out = AnimationUtils.loadAnimation(context, R.anim.slide_out_right);
switcher.setInAnimation(in);
switcher.setOutAnimation(out);
}
public static void setAnimationSlideRightToLeft(Context context, ViewAnimator switcher) {
Animation in = AnimationUtils.loadAnimation(context, R.anim.slide_in_right);
Animation out = AnimationUtils.loadAnimation(context, R.anim.slide_out_left);
switcher.setInAnimation(in);
switcher.setOutAnimation(out);
}
...
}
public interface IFlingable {
public static final int LEFT_TO_RIGHT = 0;
public static final int RIGHT_TO_LEFT = 1;
public void fling(int direction, boolean fling);
}
我发现了这个错误。我没有在课堂上的某个时刻保存上下文。上面的代码工作完美。 – dbrettschneider 2011-04-06 11:19:45
从哪里得到“IFlingable”?无法在Android API中看到它。另外,“源”是什么类型的对象?还有,“GUIHelper”来自的idk。你在背景中做了一些事情,使这个例子有点难以遵循。 – moonlightcheese 2011-05-04 23:38:10
我自己做了。我编辑了帖子,并把它们放进去。 – dbrettschneider 2011-05-05 06:20:48