2012-12-29 96 views
4

我的應用程序使用gridview來顯示一些項目,我希望在該gridview中的一些拖放。基本上用戶可以選擇一個物品並將其移動到不同的位置。這並不難實現,但我偶然發現了一個小問題。這是pointToPosition返回時INVALID_POSITION當點是之間兩個網格單元格。這是可以理解的,但並沒有真正的幫助 - 在我的情況下,我向用戶展示了訂單的預覽情況,因爲他正在拖東西,當他拖過空格時,我突然不知道應該顯示什麼。GridView pointToPosition與間距

一個解決方案是實際移除間距。但我仍然希望瓷磚之間有一定的視覺距離。

有一個機會,我錯過了某種方式來計算給定位置最近的瓷磚。

什麼是有一個與元素之間的「視覺只有」間距GridView控件的最好方法?

我現在的(暫時的?最終?)解決方案是完全不使用背景和直接繪製他們到gridview的背景。儘管這似乎不是個好主意。

+0

視圖時無法刪除的間距在'GridView'並直接將其直接添加到它的細胞意見創建網格和result.setBackgroundResource(R.drawable.padded_border_normal);時? – Luksprog

+0

單元格視圖是簡單的ImageViews。我試圖避免使用比這更復雜的東西。 – aragaer

+0

您是否嘗試向「ImageViews」本身添加一些填充並刪除「GridView'的間距? – Luksprog

回答

1

我想你已經得到了你的答案。從GridView中刪除任何間距,並在每個ImageView s中設置填充以保持所需的外觀,但實際上單元之間沒有任何間距。你說你必須重寫onMeasure(),我不確定你爲什麼必須從上面所說的那樣做到這一點。只需設置ImageView的寬度是相同GridView單元格,然後設置height=width,你可能希望將ImageView的縮放設置爲centerInside

+0

如果只是設置填充,後臺仍然會被拉伸至全尺寸。 – aragaer

+0

你指的背景是什麼?圖像背景或'GridView'背景?我建議將'GridView'背景設置爲純色(或者將其保留爲默認值)。你可以截圖嗎? – Matt

+0

圖像背景。屏幕截圖:https://dl.dropbox.com/u/15473231/reminder/ribbons。png – aragaer

2

這就是我要去到底使用:間距= 0和層列表抽拉含有shapedrawable具有圓角。另一種這樣的可拉伸被用作選擇器,用於網格視圖:

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);創建網格列表