4

私のアプリケーションは gridview を使用していくつかの項目を表示していますが、その gridview にドラッグ アンド ドロップが必要です。基本的に、ユーザーはアイテムを選択して別の位置に移動できます。実装するのは難しくありませんが、小さな問題に遭遇しました。ポイントが2つのグリッドセルの間にある場合にpointToPosition返されます。これは理解できますが、実際には役に立ちません-私の場合、ユーザーが物をドラッグしているときに順序がどうなるかのプレビューをユーザーに表示しています. .INVALID_POSITION

1 つの解決策は、実際に間隔を削除することです。しかし、タイル間に視覚的な間隔が必要です。

特定の位置に最も近いタイルを計算する方法を見逃している可能性があります。

要素間の「ビジュアルのみ」の間隔でグリッドビューを表示する最良の方法は何ですか?

私の現在の(一時的な?最終的な?)解決策は、背景をまったく使用せず、グリッドビューの背景に直接描画することです。しかし、これは良い考えではないようです。

4

2 に答える 2

2

これが最後に使用するものです。spacing=0で、角が丸いシェイプドローアブルを含むレイヤーリストドローアブルです。別のそのようなドローアブルは、グリッドビューのセレクターとして使用されます。

padded_border_normal.xml:

<item android:left="3dp"
      android:right="3dp"
      android:top="3dp"
      android:bottom="3dp">

    <shape android:shape="rectangle">
        <solid android:color="@android:color/transparent" />
        <stroke android:color="#8033b5e5" android:width="@dimen/border_width"/>
        <corners android:radius="7dp"/>
        <size android:height="60dp" android:width="60dp" />
    </shape>
</item>

padded_border_pressed.xml:

<item android:left="3dp"
      android:right="3dp"
      android:top="3dp"
      android:bottom="3dp">

    <shape android:shape="rectangle">
        <solid android:color="#6033b5e5" />
        <stroke android:color="#8033b5e5" android:width="@dimen/border_width"/>
        <corners android:radius="7dp"/>
        <size android:height="60dp" android:width="60dp" />
    </shape>
</item>

grid.setSelector(R.drawable.padded_border_pressed);グリッドをresult.setBackgroundResource(R.drawable.padded_border_normal);作成するときとグリッドリストのビューを作成するとき

于 2013-02-18T22:02:33.273 に答える
1

私はあなたがすでにあなたの答えを得ていると思います。から間隔を削除しGridView、各のパディングを設定して、希望ImageViewの外観を維持しますが、実際にはセル間に間隔を空けないでください。あなたはあなたがオーバーライドしなければならなかったと言いますonMeasure()、あなたが上で言ったことからあなたがなぜそれをしなければならなかったのか私は本当によくわかりません。幅のをセルとImageView同じに設定してから設定するだけで、のスケーリングをに設定できます。GridViewheight=widthImageViewcenterInside

于 2013-02-18T17:59:01.830 に答える