2011-04-12 6 views
0

저는 ImageView와 ImageButton을 보유하고있는 RelativeLayout을 가지고 있습니다. ImageView는 배경 이미지의 컨테이너 역할을합니다. 이제는 고정 된 위치에 버튼을 설정하여 항상 배경 이미지의 동일한 위치에 나타납니다. 여기 버튼의 동적 위치 지정 [Android]

내가 사용하고 레이아웃 파일입니다

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/relativeLayout1" android:layout_height="match_parent" 
android:layout_width="match_parent" android:gravity="center_horizontal"> 

<ImageView android:src="@drawable/bg_1" android:id="@+id/imgView" 
    android:adjustViewBounds="true" android:layout_height="match_parent" 
    android:layout_width="match_parent" /> 

<ImageButton android:layout_width="120dp" 
    android:background="@drawable/button_1" android:layout_height="30dp" 
    android:id="@+id/imgButton" android:layout_marginLeft="100dp" 
    android:layout_marginTop="170dp" /> 
</RelativeLayout> 

당신은 내가 그것을 단위로 DP를 사용하여 왼쪽/상단 여백의와 버튼의 위치를 ​​시도했다, 그러나이하지 않는 볼 수 있듯이 작업. 배경 이미지가 아래로/아래로 축소되기 때문에 위치는 일종의 방식으로 동적이어야합니다.

x-/y- 위치의 픽셀 값을 사용하는 절대 위치 지정은 here처럼 Android에서 작동하지 않는 것으로 알고 있습니다. 나는 이것을 해결할 필요가 있고 어떻게 확신 할 수 없는가.

왼쪽/위쪽 여백에 대한 값을 계산해야하고 (어떻게 될지 확실하지 않음) 다음과 같이 설정해야합니까?

final float density = getResources().getDisplayMetrics().density; 
int width = (int)((float)120 * density); 
int height = (int)((float)120 * density); 

RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams(width, height); 
rlp.leftMargin = newMargin; 
rlp.topMargin = newTopMargin; 

ImageButton imgButton = (ImageButton) findViewById(R.id.imgButton); 
imgButton.setLayoutParams(rlp); 

희망 나는 ... 뭔가를 잊지 않았다

// 편집 : 나는 생각했다 ,이 문제에 대한 이유는, 스케일 이미지가 다른 "국경"을 가지고, 수에 따라 수 화면 크기. HVGA 화면에서 1 : 1.6 비율의 이미지를 사용하면 왼쪽과 오른쪽에 검은 색 막대가 표시되는 반면 WVGA 화면에서는 막대가 왼쪽에 있습니다. 기본 배율을 사용하고 있다고 가정합니다. 나는 그것을 들여다보고, 필요하다면 다시 게시 할 것이다 ...

답변

0

왜 스케일링이 발생 하는가? 다른 장치에 다른 dpi가 있기 때문에? 다른 dpi 설정에 대해 다른 drawable을 가지고 있습니까? dpi 문제가 아니며 해당 배경 이미지를 자유롭게 확장하려는 경우 표준 레이아웃을 사용하여 작업을 수행 할 수 없습니다. 사용자 정의를 구현해야합니다.

+0

배경 이미지의 크기 조정을 의미하는 경우. 예, 화면 해상도와 밀도가 다르기 때문입니다. 실제로이 문제를 해결하기 위해 뷰를 사용자 정의해야할지 모르겠다. – taymless

+0

아. 다른 크기로 배경 이미지를 가지고 있지만 시각적 표현에 영향을 미칠 것이라고 생각했습니다. 이미지에 적용되는 크기 조정 효과가 줄어들 기 때문입니다. – taymless

+0

사용자 정의 레이아웃을 작성해야합니다. 좋은 예가 있습니다 : http://www.google.com/events/io/2009/sessions/TurboChargeUiAndroidFast.html 분 44 –