2014-03-01 3 views
0

설명 드리겠습니다. I는 가지고이 이미지 뷰 오류를 수정하는 방법은 무엇입니까?

  1. (@ 그리기/그림에 있음) 픽처와 버튼

  2. 직선 레이아웃 (ID = linear1)

버튼 XML은 아래와 같다 :

 <ImageButton 
      android:id="@+id/imageButton1" 
      android:layout_width="80dp" 
      android:layout_height="80dp" 
      android:layout_marginRight="10dp" 
      android:scaleType="fitXY" 
      android:src="@drawable/pic" 
      android:maxWidth="80dp" 
      android:maxHeight="80dp" 
      tools:ignore="ContentDescription" /> 

선형 레이아웃 xml은 다음과 같습니다.

 <LinearLayout 
     android:id="@+id/layout1" 
     android:layout_width="match_parent" 
     android:layout_height="80dp" 
     android:gravity="center" 
     android:orientation="horizontal" 
     tools:ignore="UselessLeaf" > 

내가 원하는 것은, 버튼을 클릭하면 프로그램 적으로 imagelay를 생성하여 선형 레이아웃 내부에 생성하고 단추 (그림)와 동일한 그림으로 채우고 싶습니다. 코드는 다음과 같습니다 :

//initiate imageview 
    ImageView img=new ImageView(this); 
    //get drawable from button 
    Drawable blabla=btn1.getDrawable(); 

    //set drawable to imageview 
    img.setImageDrawable(blabla); 

    //set height and width of imageview to 50dp 
    LinearLayout.LayoutParams parms = new LinearLayout.LayoutParams(50,50); 
    img.setLayoutParams(parms); 
    img.setScaleType(ScaleType.FIT_XY); 

    //place imageview to linearlayout 
    layoutTempat.addView(img); 

코드는 버튼이 같은 이미지로 이미지 뷰를 표시와 함께 잘 작동합니다. 그러나 문제는 : 프로그래밍 방식으로 이미지 뷰를 50dp로 설정하면 버튼 내부의 이미지가 너무 변경되었습니다. 어떻게 그럴 수 있습니까? 나는 iam a newbie처럼 혼란 스럽다 ..

고마워.

+0

이전에 같은 문제가 발생하여 ImageView + Button 조합을 사용하기로 결정했기 때문에 유연성이 향상되었습니다. 나는 당신이 용기를 얻은 것이 그것이 그들이 표현되기를 원하는 방식이라고 생각합니다. – Dejan

+0

버튼이 어떻게 바뀝니 까! ? –

+0

원하는 효과를 시각적으로 표현하면 도움이 될 것입니다. 또한 새로운 LinearLayout.LayoutParams (50,50);은 50 픽셀이며 * dp가 아닙니다. 이와 같이 프로그래밍 방식으로 LayoutParams를 만들려면 화면의 밀도 스케일 인수를 곱해야합니다. – Karakuri

답변

3

두 개의보기가 동일한 드로어 블을 공유합니다.

하나의 뷰에 대한 조작이 기본 드로어 블로 보내지는 것이 타당합니다. 솔직하게 다른 뷰에 표시되는 방법을 알려줍니다. 그러나이 문제는 다음과 같이 드로어 블을 복제하면 쉽게 해결할 수 있습니다 :

Drawable dr = btn1.getDrawable().getConstantState().newDrawable(); 
img.setImageDrawable(dr); 
+0

안녕하세요, 감사합니다. 이것은 궁극적 인 대답입니다. . 하지만 새로운 방법도 발견했습니다. ** 단추 속성 'scaletype'을 'cropcenter'로 변경하면 'fitxy'가 아니라 원하는 프로그램이 제대로 작동합니다. ** – studentknight

관련 문제