2017-03-21 6 views
1

私はAndroid用のピアノアプリケーションを作っています。 xmlを使って、白いキーと黒いキーの2つの長方形のボタンを作った。普通のピアノのように2つの白いキーを重ねるには黒いキーが必要です。Androidの異なる状態のボタンが重なっています

私は2つの異なるdrawable xmlファイルを作成したボタンに対して、2つの異なる状態(押された状態と押し込まれていない状態)を持っています。黒いキーを押すと、正常に動作します。しかし、私が白いキーを押すと、新しい描画可能な形状が黒いキーと重なってしまいます。私は最後にそれを定義したので、

ノーマル

Normal

ホワイトは、デフォルトでは、黒鍵は、他の2つの白鍵の上にあり、私の知識から

White Pressed

を押しましたXML。たぶん私はそれを押すとき、ボタンのソースとして新しいdrawableファイルにアクセスしているので、上にビューを描画していますか?これを防ぐためにとにかくありますか?以下の各XMLファイルのコードを提供しました。助けてくれてありがとう!

主なXML:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools"  android:layout_width="match_parent" 
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:background="#ffcccccc" 
android:gravity="top|center" 
tools:context=".MainActivity"> 
<Button 
    android:layout_width="45dp" 
    android:layout_height="150dp" 
    android:layout_marginTop="100dp" 
    android:background="@drawable/wselector" 
    android:id="@+id/button1" 


    /> 

<Button 
    android:layout_width="45dp" 
    android:layout_height="150dp" 
    android:layout_marginTop="100dp" 
    android:background="@drawable/wselector" 
    android:id="@+id/button2" 
    android:layout_toRightOf="@id/button1" 

    /> 
<Button 
    android:layout_width="40dp" 
    android:layout_height="100dp" 
    android:layout_marginTop="100dp" 
    android:background="@drawable/selector" 
    android:id="@+id/button3" 
    android:layout_toRightOf="@id/button1" 
    android:layout_marginLeft="-20dp" 
    android:onClick="soundmmm" 
    /> 

セレクタ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/wpressed" 
    android:paddingTop="10sp"></item> 
<item android:drawable="@drawable/wnormal" android:layout_marginTop="50dp"> 
</item> 
</selector> 

押されていないXML:

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

<item android:bottom="@dimen/layer_padding"> 
    <shape android:shape="rectangle"> 
     <corners android:radius="@dimen/corner_radius" /> 
     <solid android:color="#ffffffff"/> 
    </shape> 
</item> 
</layer-list> 

プレスト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="#00000000"/> 
    </shape> 
</item> 
<item android:top="@dimen/layer_padding"> 
    <shape android:shape="rectangle"> 
     <corners android:radius="@dimen/corner_radius" /> 
     <solid android:color="#ffffffff" /> 
    </shape> 
</item> 
</layer-list> 
+0

おそらく重複します。http://stackoverflow.com/questions/18074303/how-to-create-custom-shape-button-with-selector-in-android –

答えて

0

アンドロイド:stateListAnimator = "@ヌル"

Don't bring button to foreground on click

は、これは私のために働きました。それはボタンの状態とは関係なく、デフォルトのAndroidボタンのアニメーションとは関係がないことが分かります。

0

Buttonを取ると、このようなFrameLayoutでラップ:

<FrameLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_toRightOf="@id/button1"> 

    <Button 
     android:id="@+id/button2" 
     android:layout_width="45dp" 
     android:layout_height="150dp" 
     android:layout_marginTop="100dp" 
     android:background="@drawable/wselector" 
     android:onClick="soundmmm" /> 
</FrameLayout> 

FrameLayout Sの配置順序を尊重し、後ろの白いキー画像を維持する必要がありアンドロイド(これは右白鍵だけのデモです。)黒い鍵

このソリューションの欠点は、レイアウトが複雑になることです。あなたが追加のレイアウトを避ける解決策を見つけることができるなら、私はそれに行きます。さもなければ、これはあなたのために働くはずのものです。

関連する問題