0

特定の位置に固定されていないAndroidでリストビューを作成することは可能ですか?ユーザーはジェスチャーでリストビューを移動できます画面上のどこにでも移動できるフローティングリストビューを見つけようとしましたが、いくつか見つかりませんでしたlink。誰かがそれについて何か考えを持っていますか?

4

4 に答える 4

2

これを実現するには、リストビューでOnTouchListenerを設定し、そのonTouch()メソッドをオーバーライドします。onTouch()メソッドでは、(ACTION_DOWN、ACTION_MOVE)などのタッチイベントを処理する必要があります。タッチイベントを処理する方法は次のとおりです。

@Override
public boolean onTouch (View v, MotionEvent event)
{
    switch(event.getAction() & MotionEvent.ACTION_MASK)
    {
        case MotionEvent.ACTION_DOWN:
            start.set(event.getX(), event.getY());     //saving the initial x and y position
            mode = DRAG;
            break;
        case MotionEvent.ACTION_MOVE:
            if(mode == DRAG) {
                float scrollByX = event.getX() - start.x;    //computing the scroll in X
                float scrollByY = event.getY() - start.y;    //computing the scroll in Y
                v.scrollBy((int)scrollByX/20, 0);            
            }
            break;
    }   
    return false;
}

ユーザーが画面上で指を下に置くと、ACTION_DOWNイベントがトリガーされ、ユーザーが画面上で指をドラッグすると、ACTION_MOVEイベントがトリガーされます。したがって、ドラッグイベントはACTION_DOWNとACTION_MOVEの組み合わせです。
scrollXとscrollYの値を取得したら、これらの値をViewクラスのscrollBy()メソッドに渡すことで、画面上のビューを移動できます。

ここで、コードには2つの注意点があります。

  • 1つ目は、scrollYの値として0を渡したということです。これにより、リストビューのドラッグとスクロールが同時に行われなくなります。
  • 2つ目は、Androidにリスト項目のスクロールを処理させたいため、戻り値がfalseであるということです。

ここで、このための完全なコードを見つけることができます

于 2012-08-21T21:02:44.733 に答える
2

レイアウトの余白を使用してリストビューを移動します。

概要:

  • event.getX()OnTouch をオーバーライドし、およびに基づいてevent.getY()、リストビューの余白を次のように更新します。

親が相対レイアウトの場合:

RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams)mListView.getLayoutParams();
lp.leftMargin = event.getX();
lp.topMargin = event.getY();
mListView.setLayoutParams(lp);

リストビューからのイベントが onTouch に渡されるように、dispatchTouchEvent をアクティビティに追加します。

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    onTouchEvent(ev);
    return super.dispatchTouchEvent(ev);
}

お役に立てれば。

于 2012-08-21T18:57:42.637 に答える
0

WindowAndroid フレームワークでは、「フローティング」という言葉は通常、新しい(a など)と同義Dialogです。最終目標が何であるかによって多少異なりますが、階層内の残りのコンテンツの上に浮かび、簡単に表示と非表示を切り替えることができる を作成したい場合は、メソッドを持つListView内にそのビューをラップすることを検討する必要があります。PopupWindowでウィンドウを簡単に表示しshowAsDropdown()たりshotAtLocation()、 で表示しながら移動したりできるようにしupdate()ます。

Spinnerこれは、SDK の新しいバージョンがおよびのポップアップ リストを作成する方法です。Menu

于 2012-08-21T19:05:26.220 に答える
0

維持するのは難しいですが、AbsoluteLayoutでは (x,y) 座標で位置を指定できます。AbsoluteLayout 内で ListView を宣言し、Java コードでハンドルを取得してクリックをインターセプトし、新しい座標を設定するだけです。

于 2012-08-21T18:42:10.340 に答える