2016-05-22 7 views
2

私はこの質問は非常に簡単ですが、どのようにAndroid StudioプロジェクトのXMLでこの形を作成できますか?Android XMLでこの図形(添付写真)を作成していますか?

enter image description here

私は矩形を作成し、それから、半円形部分を除去するが、XMLでその効果を達成することは非常に困難であると考えられることができますように思えます。誰もこれを前にしたことがありますか?

+0

"しかし、その効果をXMLで達成することは非常に難しいようです。"はい、同意します。カスタムShapeクラスで9パッチの描画可能かShapeDrawableを使用できます。 – pskink

答えて

3

純粋xmlドローアブルと、このような背景の作成をXMLに変換するSVG後にオンラインツールhttp://www.online-convert.com/を変換使用したCAは、常にトリッキーが、可能です。

xmlに必要なボタンを作成しました。

circle.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
     <!-- inset - moves circle to the left--> 
     <inset android:insetLeft="-150dp"> 
      <shape android:shape="ring" 
        android:thicknessRatio="7" 
        android:innerRadius="0dp" 
        android:useLevel="false" 
        > 
       <stroke android:width="2dp" android:color="#000000"/> 
       <solid android:color="#ffffff"/> 
      </shape> 
     </inset> 
    </item> 
</selector> 

custom_button_default.xml

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
     <shape android:shape="rectangle"> 
      <solid android:color="#00ff00"/> 
      <stroke 
        android:color="#000000" 
        android:width="2dp"/> 
     </shape> 
    </item> 
    <item android:drawable="@drawable/circle" /> 
</layer-list> 

custom_button_pressed.xml

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
     <shape android:shape="rectangle"> 
      <solid android:color="#dddddd"/> 
      <stroke 
        android:color="#000000" 
        android:width="2dp"/> 
     </shape> 
    </item> 

    <item android:drawable="@drawable/circle" /> 

</layer-list> 
:あなたの drawableフォルダにこのファイルを追加します。

custom_button_selector.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" android:drawable="@drawable/custom_button_pressed" /> 
    <item android:drawable="@drawable/custom_button_default"/> 
</selector> 

設定custom_button_selector描画可能layoutにおけるビューの背景として:

<Button 
     android:layout_width="150dp" 
     android:layout_height="100dp" 
     android:id="@+id/button" 
     android:background="@drawable/custom_button_selector" 
     /> 

おそらくlayoutに円insetLeft値とボタンwidthheightを調整する必要があります。この変数をvalues/dimens.xmlで定義するのが良いでしょう。

デフォルト状態:

Default state

押された状態:

Pressed state

私はネクサス5とネクサス7上でそれをテストしてみた - ボタンの背景が同じに見えます。

+1

Nice!ただし、Nexusデバイスのテストには注意が必要です。彼らは常に正しく動作します:Pこれは唯一の問題は、背景が透明でないことです。これは単色でなければなりません。 –

+0

はい、そうです。サークル部分の透明度を達成することは少し難しくなります。また、Nexus以外のデバイスでも動作することを確認するために、タスクを完了した後、Samsungデバイスのすべてをテストしています:) –

関連する問題