我正在嘗試構建一個簡單的應用程序,該應用程序將顯示方形貼磚的二維,可滾動矩陣。想象一下2D Rubick's Cube,您可以選擇將單行或單列滾動,就像它是一個戒指一樣。如何在Android中製作可滾動的矩陣?
我在主視圖中放置了一個RelativeLayout
,並通過定製的ImageView
組件實現了矩陣的所有圖塊。我設置了單磚的確切位置操縱RelativeLayout.LayoutParams
值:
RelativeLayout rl = ...;
TileView tile = ...;
RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams(size, size);
rlp.setMargins(left, top, 0, 0);
rl.addView(tile, rlp);
我真的不喜歡這種方法,因爲我想改變的瓷磚,而不是邊緣的頂部和左側的參數,但是這就是我已經能夠做到最好。
我附聽者每個區塊處理的相對的行或列的拖動,這取決於事件拖動的方向。一切似乎都做工相當精細,除了幾個問題:當我滾動行權,右邊利潤率將逐步萎縮,因爲如果它試圖填補剩餘空間最後的區塊
- ,和最終會消失。
- 當我再滾動回左邊消失瓷磚不會再出現。
此外,我仍然需要指出給用戶一個無限行/列的錯覺的最佳方式。我想我應該複製每個行/列兩側的所有圖塊,可能只有當該行/列正在滾動時。
我要求你的幫助只是爲了瞭解你的想法是實現這個接口的最好辦法,因爲我想我搞亂了代碼。如果你需要更多的細節,只需問我。
謝謝!
我選擇使用不同的視圖爲每個有更好的方式來處理觸摸和對行/列滾動的事件。如果我使用單個「SurfaceView」,我應該如何處理這些事件?在那種情況下,我會有一個大視圖,應該使用座標來找到我感動的瓷磚? – marzapower
是的,就像我說的那樣,它的層次較低 - 所以你必須做一些小算術來將觸摸座標轉換爲平鋪行/列座標,然後從這裏開始。對於你在做什麼而言,有一定的獨特性的門檻,在哪一點下降到較低的水平會使事情變得更容易,即使諸如弄清楚哪個瓷磚被觸摸變得稍微難一些。我會說你在做什麼聽起來像遊戲一樣,大多數遊戲都會按照我的建議做一些事情。 –
我認爲即使是動畫也很難處理。我的意思是,如果我需要爲單個磁貼啓動一個動畫以使其消失(在Alpha通道上工作),我認爲在這個較低的級別上執行也將非常困難... – marzapower