TranslateAnimation을 사용하여 현재 위치에서 지정된 위치 (클릭 한 버튼의 위치)로 배경으로 동작하는보기를 이동하려고합니다. 그러나 어딘가에서 상자를 이동하기 시작합니다. 무작위. 아래 내 코드를 참조하십시오.안드로이드 - 이동보기
레이아웃 XML :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ScrollView
android:layout_width="match_parent"
android:layout_height="100dp"
>
<FrameLayout
android:id="@+id/frame1"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<LinearLayout
android:id="@+id/linearLayout_test"
android:layout_width="100dp"
android:layout_height="100dp"
android:background="#E02111" >
</LinearLayout>
<TableLayout
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TableRow
android:id="@+id/tableRow1"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button 1" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button 2" />
</TableRow>
<TableRow
android:id="@+id/tableRow2"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button 3" />
<Button
android:id="@+id/button4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button 4" />
</TableRow>
<TableRow
android:id="@+id/tableRow3"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<Button
android:id="@+id/button5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button 5" />
<Button
android:id="@+id/button6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button 6" />
</TableRow>
</TableLayout>
</FrameLayout>
</ScrollView>
</LinearLayout>
자바 코드 :
import android.app.Activity;
import android.os.Bundle;
import android.view.*;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;
import android.widget.*;
public class TestAnimation extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.overlapping_views);
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
//the red box
View box = findViewById(R.id.linearLayout_test);
//Initially move the background box to button 1
Button button1 = (Button) findViewById(R.id.button1);
int[] button1Loc = new int[2];
button1.getLocationOnScreen(button1Loc);
int[] boxLocation = new int[2];
box.getLocationInWindow(boxLocation);
box.setLayoutParams(new FrameLayout.LayoutParams(button1.getWidth() + 1,button1.getHeight() + 1));
TranslateAnimation animation = new TranslateAnimation(0, boxLocation[0] - button1Loc[0] , 0,boxLocation[1] - button1Loc[1]);
animation.setFillAfter(true);
animation.setDuration(400);
box.startAnimation(animation);
//add click handler on all buttons
Button button = (Button)findViewById(R.id.button1);
button.setOnClickListener(buttonClick);
button = (Button)findViewById(R.id.button1);
button.setOnClickListener(buttonClick);
button = (Button)findViewById(R.id.button2);
button.setOnClickListener(buttonClick);
button = (Button)findViewById(R.id.button3);
button.setOnClickListener(buttonClick);
button = (Button)findViewById(R.id.button4);
button.setOnClickListener(buttonClick);
button = (Button)findViewById(R.id.button5);
button.setOnClickListener(buttonClick);
button = (Button)findViewById(R.id.button6);
button.setOnClickListener(buttonClick);
}
// This is the problem - it should start moving the box from its current location to the clicked button's location
// right now it starts moving it from somewhere random :)
private OnClickListener buttonClick = new OnClickListener() {
public void onClick(View v) {
View box = findViewById(R.id.linearLayout_test);
int[] buttonLoc = new int[2];
v.getLocationOnScreen(buttonLoc);
int[] boxLocation = new int[2];
box.getLocationOnScreen(boxLocation);
TranslateAnimation animation = new TranslateAnimation(
Animation.ABSOLUTE, 0,Animation.ABSOLUTE, buttonLoc[0] - boxLocation[0],
Animation.ABSOLUTE, 0,Animation.ABSOLUTE, buttonLoc[1] - boxLocation[1]
);
animation.setFillAfter(true);
animation.setDuration(400);
box.startAnimation(animation);
}
};
}
마렉 R, xValue 대 xDelta를 지적 해 주셔서 감사합니다. (http://developer.android.com/reference/android/view/animation/TranslateAnimation.html#TranslateAnimation%28int,%20float,%20int,%20float , % 20int, % 20float, % 20int, % 20float % 29). 제안한 코드가 작동하지 않습니다. 그것을 실행하고 자신을 위해 그것을 참조하십시오. – idopaging
내 대답을 편집하십시오. –