2012-07-12 2 views

답변

2

는 내가 만족하는 솔루션을 발견 :

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

버튼 배경에 나는이 드로어 블을 넣어 어디 my_image 자원에서 이미지와 다음 my_image_pressed 당김 :

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item> 
     <bitmap android:src="@drawable/my_image" /> 
    </item> 
    <item> 
     <color android:color="#5FEC" /> 
    </item> 
</layer-list> 
+0

이상적인 솔루션이 아닙니다. 이는 이미지의 크기에 따라 다릅니다. 그것이 둥근면,이 솔루션은 나쁜 것입니다. –

+0

고마워 친구 내가 버튼을 셀렉터에 설정된 단일 이미지에 대한이 솔루션을 가지고 :) –

1

하지만 왜 두 개의 서로 다른 이미지를 사용하고 싶지 않으십니까?

+0

내가 가지고있는 경우 많은 버튼을 누르면 이미지가 커지게됩니다. – anber

+0

버튼에 이미지와 색상 조합을 사용할 수 없습니다. – Chakravyooh

+0

9- 패치 이미지를 만들어 단추 이미지의 파일 크기를 줄일 수 있습니다. 또한 버튼에는 보통 5 가지 상태 (normal, focused, pressed, disabled_focused 및 disabled)가 있어야하므로 글 머리 기호를 물고 많은 자원을 기대할 수 있습니다. 합리적으로 가능한 한 작게 만들 것이고, 디자인 제약 조건에 따라 필요한 다른 버튼의 수를 통합 할 수 있는지 확인하십시오. – Karakuri

1

것은이 작업을 수행 : 당신의 onDraw에서하여 ImageButton의 이미지에 ColorFilter을 적용 할 수 있습니다

android:background="@drawable/selector" 
+1

두 이미지가 될 것이고 그는 두 상태에 대해 단 하나의 이미지로 솔루션을 검색합니다. 나는 당신보다 다른 해결책을 찾지 못한다. – banzai86

+0

그는 두 개의 이미지를 만들어야합니다. 프로그래밍으로 관리 할 수 ​​없습니다. 두 이미지를 만드는 데 문제가 있습니다. 어떤 식 으로든 문제를 해결할 수 있어야합니다. – AkashG

+0

@ drawable/lighter_image 및 @ drawable/original_image는 무엇입니까? – anber

1

:하여 ImageButton에 그릴 수 폴더에있는 XML 파일의 이름 selector.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <!-- When selected, use grey --> 
    <item android:drawable="@drawable/lighter_image" 
      android:state_pressed="true" /> 
    <!-- When not selected, use white--> 
    <item android:drawable="@drawable/original_image"/> 

</selector> 

을 만들이 XML로 배경을 설정 상태가 눌려지면 그리고 그것이 눌려지지 않을 때 그것을 깨끗하게하십시오.

filter = new PorterDuffColorFilter(0x7FFFFFFF, PorterDuff.Mode.SRC_ATOP); 

@Override 
protected void onDraw(Canvas canvas) 
{ 
    super.onDraw(canvas); 
    if (isPressed()) 
    { 
     getDrawable().setColorFilter(filter); 
    } 
    else 
    { 
     getDrawable().clearColorFilter(); 
    } 
} 
+0

흥미 롭습니다. 시도 할 것입니다. –

관련 문제