2014-12-17 2 views
0

ImageView가 좌표를 변경하여 다른 ImageView를 따르도록하려합니다. 내 이동 방법은 그 :ImageView를 다른 imageView의 위치로 옮깁니다. - Android Studio

공개 무효 이동 (더블 ZX 이중 ZY) {

if (zx < a.getLeft()) { 

     if (a.getLeft() - zx > 0) { 

      a.setLeft(a.getLeft() - 1); 

     } else 

      a.setLeft(a.getLeft()+1); 

    } 
    if (zx > a.getLeft()) { 

     if (a.getLeft() - zx > 0) { 

      a.setLeft(a.getLeft() - 1); 

     } else 

      a.setLeft(a.getLeft() - 1); 

    } 

    if (zy > a.getTop()) { 

     if (a.getTop() - zy > 0) { 

      a.setTop(a.getTop() - 1); 

     } else 

      a.setTop(a.getTop() + 1);; 

    } 

    if (zy < a.getTop()) { 

     if (a.getTop() - zy > 0) { 

      a.setTop(a.getTop() - 1); 

     } else 

      a.setTop(a.getTop() + 1); 

    } 

} 

에서 OnCreate :

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_fase); 
    a = (ImageView)findViewById(R.id.a); 
    b = (ImageView)findViewById(R.id.b); 

    move(b.getLeft(), b.getTop()); 
} 

"A"와 "B"인 ImageViews 및 b를 따라야합니다. ImageViews를 올바르게 선언 했으므로 메서드가 제대로 작동합니다. 대신 ImageView "a"는 응용 프로그램이 시작된 이후 동일한 위치에 있습니다. 뭐가 잘못 되었 니? 메서드가 잘못된 위치 (onCreate)에 선언 되었습니까? 또한 화면의 다른 부분에 "a"의 세로 위치를 설정하여 작동하는지 테스트하려고했습니다. 하지만 그렇지 않았습니다 (그리고 logCat에 따르면 수직 위치가 변경되었습니다). 움직이는 이미지에 대한 자습서는 이미지 드래그를 기반으로하지만 아직 다른 종류의 움직임에 대해서는 아직 찾지 못했습니다.

내 레이아웃 (activity_fase.xml)가있다 :

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
android:paddingBottom="@dimen/activity_vertical_margin" 
tools:context="thegame.app.Fase" 
android:background="@drawable/seapaint"> 


<ImageView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/b" 
    android:layout_centerVertical="true" 
    android:layout_centerHorizontal="true" 
    android:src="@drawable/b"/> 

<ImageView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/a" 
    android:layout_alignParentBottom="true" 
    android:layout_centerHorizontal="true" 
    android:src="@drawable/a" 
    android:focusable="true" 
    android:clickable="false" 
    android:layout_marginBottom="79dp" /> 

<ImageView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/imageView2" 
    android:layout_above="@+id/b" 
    android:layout_alignLeft="@+id/a" 
    android:layout_alignStart="@+id/key" 
    android:layout_marginBottom="67dp" 
    android:src="@drawable/key" 
    android:layout_marginLeft="50dp"/> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceSmall" 
    android:text="Small Text" 
    android:id="@+id/points" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" /> 

나는 안드로이드 개발에 새로운 해요, 나는 상대 레이아웃과 직선 사이의 차이를 모른다 형세.

+0

'ImageView'는 모두 'LinearLayout'이 아닌'RelativeLayout'과 같은 것입니까? 레이아웃 뷰 (activity_fase.xml)를 줄 수 있습니까? – Harry

+0

질문에 레이아웃보기를 추가했습니다. – Danilo

+0

"a"ImageView는 (당신의 XML에서) 어떤 포지셔닝 규칙을 위반하는 속성을 사용하고 있습니다. 그것은'android : layout_alignParentBottom = "true"'입니다. 이 속성은 뷰에서 모든 위치 지정을 무시하고 부모 뷰의 맨 아래에 배치합니다. 그래서 당신은 그것을 제거해야합니다. – Harry

답변

0

문제는 코드에 의해 RelativeLayout의 설정에 의해 화면의 모든 영역에 대한 이미지 뷰의 위치를 ​​변경하는 것이 가능하고, 그것의에 추가하면 leftMargin 및 topMargin 파라미터

를 해결했다. 예 :

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams (80,80); // 80은 제 선택의 숫자입니다. 많은 가능성이 있습니다

params.leftMargin = 200;

params.topMargin = 400;

a.setLayoutParams (params);

이제 imageView의 좌표는 (200,400)입니다. 연속적인 변경이 가능합니다. 매 0.05 초마다 호출되는 타이머를 생성하고 leftMargin 및 topMargin에 1을 더하는 작업을 수행하면 이미지의 위치가 성공적으로 변경됩니다.

관련 문제