0

我想爲遊戲創建一個Android自定義組件。基本思想是自定義組件的形狀是正方形的,並在其中包含其他方形ImageView組件。 ImageView組件可能會根據需要縮放和/或裁剪,但必須保持平方。行數==列,總是。難度級別確定運行時行和列的確切值。隨着遊戲變得越來越困難,行數和列數將相應增加,但每個ImageView的縮放大小將相應地縮小。我希望組件之間有一些固定的小間距,大多數情況下它看起來不錯。顯示屏將不可滾動,所有項目必須同時顯示在顯示屏上。Android Custom Compoent在代碼中擴展FrameLayout

經過一堆失敗的嘗試後,我感到沮喪,我不知道什麼是最好的方法是使這個自定義組件。

我最近的想法是做大致有以下幾種:

創建我的自定義組件類的「擴展的FrameLayout」。在我的構造函數中,我使用代碼創建了一個任意的小方形ImageView對象。我希望其他人能夠重複使用我的自定義組件,所以我使用代碼而不是XML來實現,以便自定義組件不依賴任何必須定義的外部XML drawable。我設置了縮放類型,以便ImageView保留它的「方形」(我想我想fitStart?)。我將ImageView的layout_width和layout_height設置爲「fill_parent」,因此ImageView填充的空間與包含FrameLayout的空間相同。我使用addView()將現在大而正方形的ImageView添加到我的佈局中。

接下來,我創建一個RelativeLayout對象,並以編程方式將其添加到自己使用addView()。因爲我的基類是一個FrameLayout,我認爲這會使RelativeLayout的大小與之前添加的正方形ImageView相同。至少這是我閱讀文檔的方式。

接下來我測量ImageView以查看它有多大。我不認爲我可以衡量自己,因爲我以前的嘗試失敗了。我的體型一直保持0。我的研究表示這是因爲我在施工期間無法衡量自己。這變成了Catch-22。當我試圖將我的圖像縮放到可用空間時,我無法做到,因爲還沒有可用的空間。我的希望是,因爲我更改爲使用FrameLayout作爲我的基類,並將ImageView添加到它,我將能夠測量我新創建並正確縮放的大方形ImageView。

如果一切按計劃進行,我現在知道用戶設備上的RelativeLayout空間有多大,因爲它與我的ImageView相同。通過知道有多少空間可用以及需要顯示多少行和列,我可以正確縮放每個我相應添加的ImageView,假設我記得說明了我添加的ImageView之間的間距。現在我不再需要方形ImageView,並且如果需要它可以讓它消失。

如果合理,我想大的ImageView有圓角,每個ImageView添加也有圓角。添加了ImageViews之間的小差距,這對遊戲玩法看起來很酷。這樣我可以把它作爲背景。

這似乎是一個很好的解決方案,比我以前的嘗試沒有用,但如果有更好的方法...,我正在傾聽。

下面是一些僞代碼,主要是說同樣的事情上面盡我的理解:

 
construct() 
{ 
    ImageView squareImageView = new ImageView(Square); 
    LayoutParams squareImageLayoutParams = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); 
    squareImageLayoutParams.addRule(fitStart); 
    addView(squareImageView, squareImageLayoutParams); 

    RelativeLayout relativeLayout = new RelativeLayout(context); 
    LayoutParams relativeLayoutParams = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); 
    addView(relativeLayout, relativeLayoutParams); 

    int size = squareImageView.getWidth(); // Should be the scaled size and square. 
    squareImageView.setVisibility(INVISIBLE); // maybe? 

    loop for each row and col 
    { 
     crop, scale and add each image to the relativeLayout object. 
    } 
} 

我最基本的問題是,如果這似乎是一個合理的解決方案?如果是這樣的話,那麼我不知道該怎麼辦(psuedocode)。

  • 如何在代碼中創建小方形ImageView?
  • 如何在代碼中設置scaleType?
  • 我能測量我的正方形ImageView並獲得正確的尺寸嗎?
  • 有沒有更好的方法來刪除方形ImageView,而不是讓它看不見?
  • 將使我的方形ImageView無形使其無法測量?
  • 我看到一個叫做ShapeDrawable的東西,這會比用於製作正方形的ImageView更好嗎?
  • 如何裁剪ImageView爲正方形,同時向雙方分配損失?

我當然不指望任何人知道所有這些答案,但如果你知道任何答案,你可以分享,我將不勝感激。

謝謝。

+0

我仍然得到一個0,我會嘗試看看我是否可以將大小測試移動到代碼的稍後一點。 – user405821 2011-02-13 05:25:11

回答

0

有很多內置功能可以適當縮放到可用的屏幕空間。我不完全明白你爲什麼要測量ImageView

您是否考慮過使用weight?我會嘗試固定尺寸GridView(或TableLayoutLinearLayoutLinearLayout s)。如果內容是weight'正確編輯,他們將保留其「方形」。您可以使用或horizontalSpacingGridView的屬性,或者您也可以使用空的View作爲間隔,以便將weight也放入空格中。

不要設置父元素的weightsum屬性,但要確保水平方向上元素權重的總和等於它們的垂直總和,並且您的方形ImageView總是可以正確縮放,而不管您獲得了多少元素那裏。