Android ViewFlipper +主屏幕动画

时间:2010-04-28 18:27:41

标签: android animation homescreen viewflipper

我正在尝试使用ViewFlipper并使其像主屏幕一样(布局将随您的手指移动)。 Check out this举个例子。我想用一个只包含两个子节点的ViewFlipper来做这个,所以相应的视图应该显示在当前视图的两侧,具体取决于用户移动手指的方式。此代码可以工作,但一次只能用于1个方向。这是在onTouchEvent中。

case MotionEvent.ACTION_MOVE: 

leftView.setVisibility(View.VISIBLE);
rightView.setVisibility(View.VISIBLE);
// move the current view to the left or right.
currentView.layout((int) (touchEvent.getX() - oldTouchValue),
    currentView.getTop(),
    (int) (touchEvent.getX() - oldTouchValue) + 320,
    currentView.getBottom());

// place this view just left of the currentView
leftView.layout(currentView.getLeft() - 320, leftView.getTop(),
    currentView.getLeft(), leftView.getBottom());

// place this view just right of the currentView
rightView.layout(currentView.getRight(), rightView.getTop(), 
    currentView.getRight() + 320, rightView.getBottom());

我放在最后那个方向的最后两行的哪一行会正常工作但另一行不会。

以下是我设置leftView和rightView的方法:

final View currentView = myFlipper.getCurrentView();
final View leftView, rightView;
if (currentView == meView) {
    Log.d("current layout: ", "me");
    leftView = youView;
    rightView = youView;
} else if (currentView == youView) {
    Log.d("current layout: ", "you");
    leftView = meView;
    rightView = meView;
} else {
    leftView = null;
    rightView = null;
}

是否可以对其进行设置,以便在当前视图的两侧显示相同的视图?

4 个答案:

答案 0 :(得分:1)

谢谢stealthcopter

如果有人感兴趣,那么这里有效的新代码。

        if (touchEvent.getX() < oldTouchValue){
             // place this view just right of the currentView
            rightView.layout(currentView.getRight(), rightView.getTop(), 
                            currentView.getRight() + 320, rightView.getBottom());

        }else if (touchEvent.getX() > oldTouchValue) {
            // place this view just left of the currentView
            leftView.layout(currentView.getLeft() - 320, leftView.getTop(),
                            currentView.getLeft(), leftView.getBottom());

        }

我还将setVisibility()调用移动到MotionEvent.ACTION_DOWN,试图摆脱视图的一些闪烁。这有帮助,但我仍然有点。

答案 1 :(得分:0)

我可能不是很有建设性的建议,但是如果你希望它的行为像主屏幕一样,为什么你不想看{​​{3}},并根据你的需要修改它?

答案 2 :(得分:0)

要摆脱闪烁,请在setVisibility(View.INVISIBLE)中设置MotionEvent.ACTION_DOWN。视图上的默认值为“GONE”。这意味着您无法在视图上设置Layout(),直到它“可见”或“不可见”。所以分三步:

  1. 在视图上将可见性设置为INVISIBLE
  2. 在视图
  3. 上设置布局()
  4. 在视图上将可见性设置为可见

答案 3 :(得分:0)

如果我理解您的请求,现在应使用View Pager

实施此效果

看起来像这样:

enter image description here