Android ViewFlipper + Homescreenアニメーション
-
02-10-2019 - |
質問
私はビューフリッパーを使用して、ホーム画面のように動作させようとしています(レイアウトは指で動きます)。 これをチェックしてください 例として。私はこれをビューフリッパーで行いたいと思っています。これは、2人の子供のみを含むので、ユーザーが指を動かす方法に応じて、現在のビューの両側に反対のビューを表示する必要があります。このコードは機能しますが、一度に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());
最後に置いた下の2行のうち、その方向は正しく機能しますが、もう一方はそうしません。
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;
}
現在のビューの両側に同じビューが表示されるように、セットアップすることは可能ですか?
解決
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());
}
また、ビューのちらつきを取り除くために、MotionEvent.action_DownにsetVisibility()呼び出しを移動しました。これは助けになりましたが、私はまだ少し得ています。
他のヒント
私はおそらくあまり建設的な提案ではありませんが、あなたがそれをホーム画面のように振る舞いたいなら、なぜあなたは そのsrc, 、そしてそれをあなたのニーズに合わせて変更しますか?
ちらつきを取り除くには、セットします setVisibility(View.INVISIBLE)
の MotionEvent.ACTION_DOWN
. 。デフォルト値は、ビューで「なくなった」です。つまり、設定できないことを意味します Layout()
それが「可視」または「目に見えない」のいずれかになるまで、ビューで。だから3つのステップで:
- ビューで可視性を見えないように設定します
- ビューでレイアウト()を設定します
- ビューで可視性を表示するように設定します