2014-10-19 4 views
1

순환 단추가있는 숫자 키패드처럼 보이는 표 레이아웃이 있습니다 (단추는 둥근 배경이있는 textviews 임). 이제 전체 키패드에 그라디언트를 적용하고 싶습니다. 하지만 그라디언트를 버튼에서만 볼 수 있습니다. 버튼 주위의 공간은 흰색이어야합니다. xml을 통해 그것을 달성 할 수있는 방법이 있습니까?여러보기에 그라디언트 적용

답변

0

업데이트 : 예, 저는 XML에서 그렇게 할 수있는 방법을 생각할 수 있습니다. 배경 레이아웃에 그라디언트를 설정하십시오. 그런 다음 주위에 흰색 채우기가 필요한 크기의 투명한 원과 각 가장자리 주위에 정의 된 작은 9 개의 패치가있는 9 패치 드로어 블 이미지를 만듭니다 (따라서 원이 늘어나지 않습니다).

TextView 배경을 귀하의 9 패치 및 그리드 셀이 전체 테이블 레이아웃에 맞게 확장되었는지 확인하십시오 (따라서 흰색 에지가 함께 병합됩니다.)

원문 대답 : XML을 사용하는 쉬운 방법은 없을 것입니다. onDraw 메서드를 재정의 할 수 있도록 Drawable 클래스를 확장하는 클래스를 만들어야 할 것입니다. RadialGradient (Drawer가 아닌 Shader)를 만들어야하고 각 단추가 셰이더가 설정된 페인트를 만들면됩니다. 공통 셰이더.

각 단추를 그릴 때 단추의 y 값을보고 캔버스를 -y로 변환 한 다음 셰이더 페인트를 사용하여 y에 원을 그립니다 (canvas.drawCircle (..)). . 그라디언트가 전체 페이지에 걸쳐 그려지는 것처럼 색상 그라디언트가 맵핑 된 상태에서 화면의 같은 위치에 원을 배치해야하지만 버튼 만 볼 수 있습니다.

+2

답변 해 주셔서 감사합니다. 귀하의 답변은 모두 내 필요에 완벽합니다. 나는 두 번째 방법을 따랐다. 그러나 나는 셰이더를 사용하지 않았다. 테이블 레이아웃 배경에 선형 그래디언트를 적용했습니다. 그리고 나서 textview 클래스를 확장하여 캔버스에 흰색 직사각형을 그리고 투명 페인트를 사용하여 가운데에 원을 그렸습니다. 그럼, 내 테이블 행 내에서 내 텍스트보기에이 클래스를 사용했습니다. –

0

전체 레이아웃에 배경색을 흰색으로 설정하십시오.

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android" > 
<item android:state_pressed="true"> 
<shape> 
<gradient 
android:startColor="#454545" 
android:endColor="#F0F0F0" 
android:angle="270"/> 
<stroke 
android:width="4dp" 
android:color="#B5F6EC"/> 
<corners 
android:radius="0dp" /> 
<padding 
android:left="0dp" 
android:top="0dp" 
android:right="0dp" 
android:bottom="0dp" /> 
</shape> 
</item> 
<item android:state_focused="true"> 
<shape> 
<gradient 
android:startColor="#454545" 
android:endColor="#F0F0F0" 
android:angle="270"/> 
<stroke 
android:width="4dp" 
android:color="#B5F6EC"/> 
<corners 
android:radius="0dp" /> 
<padding 
android:left="0dp" 
android:top="0dp" 
android:right="0dp" 
android:bottom="0dp" /> 
</shape> 
</item> 
<item android:state_enabled="false"> 
<shape> 
<gradient 
android:startColor="#454545" 
android:endColor="#F0F0F0" 
android:angle="270"/> 
<stroke 
android:width="4dp" 
android:color="#B5F6EC"/> 
<corners 
android:radius="0dp" /> 
<padding 
android:left="0dp" 
android:top="0dp" 
android:right="0dp" 
android:bottom="0dp" /> 
</shape> 
</item> 
<item> 
<shape> 
<gradient 
android:startColor="#F0F0F0" 
android:endColor="#454545" 
android:angle="270"/> 
<stroke 
android:width="0dp" 
android:color="#000000"/> 
<corners 
android:radius="0dp" /> 
<padding 
android:left="0dp" 
android:top="0dp" 
android:right="0dp" 
android:bottom="0dp" /> 
</shape> 
</item> 
</selector> 

내 자식 심판을 참조하십시오

저장 앱 RES-에 gradiant_button.xml> 당김 폴더

gradiant_button.xml : 그리고 각각의 모든 버튼에 그라데이션을 적용 을 https://github.com/iamsarker/android-apps/tree/master/CustomButton

버튼 xml은

입니다.210
<Button 
android:id="@+id/btn11" 
android:layout_width="0dp" 
android:layout_height="wrap_content" 
android:layout_weight="3" 
android:background="@drawable/gradiant_button" 
android:text="@string/btnText" /> 
+1

감사합니다. Sarker 님, 답변입니다. 하지만 모든 버튼에 그래디언트를 적용하고 싶지 않습니다. 내가 그렇게하면 모든 단추가 똑같이 보일 것입니다. 나는 그것을 원하지 않는다. 내가 무슨 뜻인지 이해한다면. –

+0

은 당신이 원하는 단추에 android : background = "@ drawable/gradiant_button"을 넣었습니다. –

관련 문제