2012-07-30 2 views
4

맞춤 UI 위젯에 LayerDrawable을 사용하려고합니다. 다른 레이어와 다른 경계로 그려지지만 작동하지 않는 것 같습니다. 기본적으로, 내 코드는 다음을 수행합니다android는 레이어 드로잉 가능 레이어 하나에 테두리를 설정합니다.

int left, top, right, bottom; 
/*... do some math ... */ 
Drawable d = mDrawable.findDrawableByLayerId(R.id.some_specific_layer); 
d.setBounds(left, top, right, bottom); 

한편, XML은 다음과 같습니다

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 

<item> 
    <shape android:shape="rectangle" > 
     <solid android:color="#ff999999" /> 
    </shape> 
</item> 
<item 
    android:id="@id/some_specific_layer" 
    android:drawable="@drawable/some_drawable"/> 

을 이상적으로 나는 회색 전시의 양, 회색 사각형을 통해 some_drawable 볼 것이다 bounds 계산의 결과에 따라 뒤에서. 그러나 나는 회색 레이어를 전혀 보지 못했습니다. 경계가 어떻게 든 설정되기 때문에 나타나는 것 같습니다. enter image description here

상부 이미지 I를 달성하기 위해 원하는이다 : 여기 EDIT

예상 결과에 비해 소정의 시각의 그레이는 제 1 층에 대응하고 그레디언트는 미리 정의 된 id을 갖는 제 2 층에 대응한다. 실제 결과에는 회색이 표시되지 않습니다.

다른 레이어에 영향을주지 않고 LayerDrawable의 한 레이어의 경계를 설정할 수있는 사람은 누구입니까?

답변

1

Android 개발자 Google 그룹에서 몇 가지 답변을 받았습니다. 본질적으로 자식이 모두 자식 상태 인을 관리하므로 신뢰할 수있는 방법은 LayerDrawable입니다. 나는 그 대신에 만족스러운 결과와 함께 두 개의 개별 드로어 블을 사용하는 접근 방식을 채택했습니다. LayerDrawable 사용

https://groups.google.com/d/topic/android-developers/fUxtJstdkBM/discussion

+0

, 코드 샘플을 추가하거나 문제에 대한 해결책을 설명해주십시오 접근 가능 –

+0

불행히도 나는 토론의 세부 사항이나 내가 결국 해결 한 해결책을 상기하지 않는다. 배경 이미지를 사용하거나 Drawable을 Canvas에서 직접 그렸습니다. – Karakuri

0

가이 코드와 비슷한 일을 관리했습니다 : 여기에 참조 할 수 있도록 토론 게시글입니다

// create first shape 
ShapeDrawable shape1 = new ShapeDrawable(new OvalShape()); 
shape1.getPaint().setColor(0xFFFFFF00); 
shape1.setIntrinsicWidth(50); 
shape1.setIntrinsicHeight(50); 
shape1.invalidateSelf(); 

// create second shape 
ShapeDrawable shape2 = new ShapeDrawable(new OvalShape()); 
shape2.getPaint().setColor(0xFFFFB400); 
shape2.setIntrinsicWidth(20); 
shape2.setIntrinsicHeight(50); 
shape2.invalidateSelf(); 

// create layerDrawable (layer-list in xml) 
// it containt our 2 shapes and the order in wich they will be drawn (shape2 is on top). 
LayerDrawable layerDrawable = new LayerDrawable(new Drawable[]{shape1, shape2}); 

// ajust position shape1 and shape2 
layerDrawable.setLayerInset(0, 0,0,0,0); 
layerDrawable.setLayerInset(1, 15,0,15,0); 

결과는 (검정색 배경에) : 솔루션이 URL 및 토론이 아니기 때문에

관련 문제