2012-01-08 11 views
5

とボタン:アンドロイド:私は、次の画像のように2つの背景色、とAndroidの上のボタンのスタイルを作りたい2つの背景色

http://i.stack.imgur.com/ExKXl.png

は描画可能なリソースを作ることが可能ですか?私はhttp://developer.android.com/guide/topics/resources/drawable-resource.htmlの解決策を探していますが、2色を持つことはできません。

方法はありますか?

溶液アイテムと<layer-list>を作成することであり、各<item><shape>を有する

を[回答を編集]。

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 

    <!-- Top color --> 
    <item android:bottom="16dp"> 
     <shape android:shape="rectangle"> 
      <solid android:color="#FF0000" /> <!-- RED --> 
     </shape> 
    </item> 

    <!-- Bottom color --> 
    <item android:top="16dp"> 
     <shape android:shape="rectangle"> 
      <solid android:color="#00FF00" /> <!-- GREEN --> 
     </shape> 
    </item> 
</layer-list> 

しかし、私は、私はそれぞれの形状に角を入れしようとしていた、別の問題があった:コードは(全体のボタンが32dp高ので、私は、各色の半分の高さを使用しています)怒鳴るです。私はandroid:topLeftRadiusandroid:topRightRadiusを最初の形に、そしてandroid:bottomLeftRadiusandroid:bottomRightRadiusを2番目の形に入れようとしましたが、それは私にコーナーを示していませんでした!だから解決策はandroid:radiusを使用することでした(8つのコーナーはすべて丸みを帯びていました!)そして余分なコーナーを克服するためにもう2つのアイテムを入れてください。最後に、XMLは次のようになっています。

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 

    <!-- Top color with corner --> 
    <item android:bottom="16dp"> 
     <shape android:shape="rectangle"> 
      <corners android:radius="5dp" /> <!-- It´s obligatory, It didn´t work only with android:topLeftRadius and android:topRightRadius --> 
      <solid android:color="#FF0000" /> <!-- RED Color--> 
     </shape> 
    </item> 

    <!-- Takes off the center corner --> 
    <item android:top="8dp" android:bottom="8dp"> 
     <shape android:shape="rectangle"> 
      <solid android:color="#FF0000" /> <!-- RED Color--> 
     </shape> 
    </item> 

    <!-- Bottom color with corner --> 
    <item android:top="16dp"> 
     <shape android:shape="rectangle"> 
      <corners android:radius="5dp" /> <!-- It´s obligatory, It didn´t work only with android:bottomLeftRadius and android:bottomRightRadius --> 
      <solid android:color="#00FF00" /> <!-- GREEN Color --> 
     </shape> 
    </item> 

    <!-- Takes off the center corner --> 
    <item android:top="16dp" android:bottom="8dp"> 
     <shape android:shape="rectangle"> 
      <solid android:color="#00FF00" /> <!-- GREEN Color --> 
     </shape> 
    </item> 

</layer-list> 

これまでのところ、ありがとうございました!

+0

可能複製(http://stackoverflow.com/questions/8727238/banded-background-with-two-colors) –

答えて

4

可能性の重複:Javaを使用して答えbanded background with two colors?

れる:

Bitmap bmResult = Bitmap.createBitmap(buttonWidth, buttonHeight, Bitmap.Config.ARGB_8888); 
    Canvas canvas = new Canvas(bmResult); 
    Paint paint = new Paint(); 
    paint.setShader(new LinearGradient (0, 0, 0, bmResult.getHeight()/2, 0xFF284560, 0xFF284060, TileMode.MIRROR)); 
    canvas.drawPaint(paint); 
    paint.setShader(new LinearGradient (0, 0, 0, bmResult.getHeight()/2, 0x55FFFFFF, 0x22FFFFFF, TileMode.CLAMP)); 
    paint.setMaskFilter(new BlurMaskFilter(3, BlurMaskFilter.Blur.NORMAL)); 
    canvas.drawRect(0, 0, bmResult.getWidth(), bmResult.getHeight()/2, paint) 

がSO同じトピックに投稿する別から持ち上げた:Gradients and shadows on buttons

とXMLを使用して受け入れたソリューションドロワブル:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:bottom="20dp"> 
     <shape android:shape="rectangle" > 
      <size android:height="20dp" /> 
      <solid android:color="#ff0000" /> 
     </shape> 
    </item> 

    <item android:top="20dp"> 
     <shape android:shape="rectangle" > 
      <size android:height="20dp" /> 
      <solid android:color="#0000ff" /> 
     </shape> 
    </item> 
</layer-list> 

他の人が言ったように:

最も手際の良い9patch imageを作成することができます。

+1

私はあなたが提供したソリューションが私のために働いたXMLを使用することを好む。ありがとう! –

3

私は最も簡単な方法は、描画ソフトウェアを使用して背景を作成することだと思います。

1

おそらく<layer-list>が2つの<shape>個のアイテム(画像の境界線を取得するため)である可能性があります。

+0

の中の形を使って作業しました。 よりも多く含むことができるというAndroidのドキュメントでは見つからない。どうもありがとうございました! –

1

あなたがしたいことに最適なのは、nine patch imageです。それは、システムボタンのすべての背景がどのように構築されるかです。たとえば、thisを参照してください。

1

ShapeGradientDrawableをご覧ください。

これは私の作品:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:bottom="16dp"> 
     <shape android:shape="rectangle" > 
      <corners 
       android:topLeftRadius="5dp" 
       android:topRightRadius="5dp"/> 
      <size android:height="16dp" /> 
      <solid android:color="#f00" /> <!-- RED --> 
     </shape> 
    </item> 

    <item android:top="16dp"> 
     <shape android:shape="rectangle" > 
      <corners 
       android:bottomLeftRadius="5dp" 
       android:bottomRightRadius="5dp"/> 
      <size android:height="16dp" /> 
      <solid android:color="#f0f0" /> <!-- GREEN --> 
     </shape> 
    </item> 
</layer-list> 

しかし、documentationは言った:

を隅々は、(最初​​は)何のコーナーがない他の 1より大きい角の半径を提供し、またはしなければなりません丸めた。特定のコーナーが に丸められないようにするには、android:radiusを使用して、デフォルトの コーナー半径を1より大きい値に設定してから、すべてのコーナー を0に設定します")どこに 角を丸くしたくないですか?

だから、これを試してみてください。

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:bottom="16dp"> 
     <shape android:shape="rectangle" > 
      <corners 
       android:radius="5dp" 
       android:bottomLeftRadius="0dp" 
       android:bottomRightRadius="0dp"/> 
      <size android:height="16dp" /> 
      <solid android:color="#f00" /> <!-- RED --> 
     </shape> 
    </item> 

    <item android:top="16dp"> 
     <shape android:shape="rectangle" > 
      <corners 
       android:radius="5dp" 
       android:topLeftRadius="0dp" 
       android:topRightRadius="0dp"/> 
      <size android:height="16dp" /> 
      <solid android:color="#f0f0" /> <!-- GREEN --> 
     </shape> 
    </item> 
</layer-list> 
[?2色で縞模様の背景]の
+0

@Gabriela:これが動作すれば教えてください! –

関連する問題