2016-09-24 9 views
1

私は2枚の画像がありますのAndroidのImageButtonスワップリソースの葉 '残基'

IMG_1:

enter image description here

IMG_1_PRESSED:

enter image description here

私は、デフォルトでIMG_1を表示するが、クリックすると、画像がIMG_1_PRESSEDに変わります。 beが正しいドローアブルを含むenumあるのはここ

は、ボタン自体のコードスニペットです:

ImageButton ib = new ImageButton(this.context); 

    ib.setImageResource(be.getDrawable()); 
    ib.setScaleType(ImageButton.ScaleType.CENTER_INSIDE); 
    ib.setBackgroundColor(Color.TRANSPARENT); 
    ib.setPadding(0, 0, 0, 0); 

    ib.setAdjustViewBounds(true); 
    ib.setMaxWidth(width); 
    ib.setMaxHeight(height); 

    setStrengthListener(ib, be); 

そして、ここではsetStrengthListener方法である:

private void setStrengthListener(final ImageButton ib, final ButtonEnum be){ 
    ib.setOnTouchListener(new View.OnTouchListener() { 

     @SuppressLint("ClickableViewAccessibility") 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      switch(event.getAction()) { 
       case MotionEvent.ACTION_DOWN: 
        ib.setImageResource(be.getDrawablePressed()); 
        return true; 
       case MotionEvent.ACTION_UP: 
        ib.setImageResource(be.getDrawable()); 
        return true; 
      } 
      return false; 
     } 
    }); 
} 

今、両方の画像は480x240であり、 widthheightはそれぞれデバイスの幅/ 3とデバイスの幅/ 6に設定されています(3つの画像を表示したいので、/ 3)。ここで

が問題だボタンが押された場合、私はこれを取得:

enter image description here

押されたボタンの下に、この小さなラインがあります...私はこの問題を解決するために多くのことを試みたが、何とかそのました小さな線が今日私の最大の敵になった。余分な努力として

ImageButton ib = new ImageButton(this.context); 

    ib.setImageResource(be.getDrawablePressed()); 
    ib.setScaleType(ImageButton.ScaleType.CENTER_INSIDE); 
    ib.setBackgroundColor(Color.TRANSPARENT); 
    ib.setPadding(0, 0, 0, 0); 
    ....etc 

しかし、明らかに、私はボタンを押しながら起動する必要はありません:私はIMG_1_PRESSEDに元のリソースを設定した場合、行はもう表示されません。

親愛なるAndroidの専門家、私はここで間違っていますか?

答えて

0

多くの試行錯誤のあと、私はその灰色の線を取り除くことができました。私は完全にわからないけれども、これはそれを修正し、なぜ最後では、実際には非常に簡単だった:

メインレイアウト

LinearLayout ll = new LinearLayout(this); 
    ll.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); 
    ll.setOrientation(LinearLayout.HORIZONTAL); 
    ll.setGravity(Gravity.TOP); 

ビュー作成(ImageViewのためのレイアウトが変更されていません) :

ImageView iv = tbb.getTopBarButton(ButtonEnum.IMG_1); 

LinearLayout iViewLayout = new LinearLayout(this); 
iViewLayout.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
iViewLayout.setOrientation(LinearLayout.HORIZONTAL); 

iViewLayout.addView(iv); 

ll.addView(iViewLayout); 

イメージビューごとに別のレイアウトを追加すると、グレーの線が削除されたようです。しかし、これがうまくいくのを知りたいですが、将来の参考として、少なくとも私は他人を助けることを望みます。

1

私が知っているように、これが最も簡単な解決策である、 は

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

は、その後、あなたのView

に背景として、この 描画可能ファイルを追加し、この

があなたのDrawableのフォルダ内のXMLを作成してみ

例:

<ImageView 
    android:id="@+id/enter_btn" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:adjustViewBounds="true" 
    android:maxHeight="100dip" 
    android:maxWidth="100dip" 
    android:layout_centerHorizontal="true" 
    android:layout_alignParentBottom="true" 
    android:background="@drawable/enter_btn" /> 

またはJavaコードで

yourView.setImageResource(R.drawable.*drawablefile*); 

またImageButtonを使用することができますが、それは、ボタンの境界線を持っていないので、ImageViewImageButtonより良く見えるでしょう。

+0

ご回答ありがとうございます。私はImageViewに切り替え、ボタンを使用する意味がありませんでした。しかし問題は依然として残っていましたが、試行錯誤と読書のカップル(7)時間後、私はそれを理解しました。私は解答で解決策を書くつもりです=) –

関連する問題