다른 이미지의 위치를 기반으로 ImageView의 위치를 변경하는 방법을 만들었습니다.안드로이드 - 메서드가 반복적으로 실행되지 않습니다.
public void move(double zx, double zy) {
RelativeLayout.LayoutParams params =
new RelativeLayout.LayoutParams(80,80);
// the imageView s was initialized in the onCreate()
System.out.println("working");
if (zx < s.getLeft()) {
if (s.getLeft() - zx > 0) {
params.leftMargin = s.getLeft() -1;
} else
params.leftMargin = s.getLeft() +1;
}
if (zx > s.getLeft()) {
if (s.getLeft() - zx > 0) {
params.leftMargin = s.getLeft() -1;
} else
params.leftMargin = s.getLeft() +1;
}
if (zy > s.getTop()) {
if (s.getTop() - zy > 0) {
params.topMargin = s.getTop() -1;
} else
params.topMargin = s.getTop() + 1;
}
if (zy < (int)s.getY()) {
if ((int)s.getY() - zy > 0) {
params.topMargin = s.getTop() -1;
} else
params.topMargin = s.getTop() + 1;
}
s.setLayoutParams(params);
}
그럼 난 오직 한번의에서 onCreate()
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fase);
s = (ImageView)findViewById(R.id.s);
box = (ImageView)findViewById(R.id.box);
move(box.getLeft(),box.getTop());
}
메시지 "작업"인쇄 된 호출. 이미지 뷰의 위치도 바뀌지 않았습니다. 나의 결론은이 방법이 반복적으로 실행되지 않았다는 것이다. 그렇지 않으면, imageView의 위치가 매번 바뀌고 "작동 중"이라는 메시지가 매 순간 나타납니다. 어떻게 해결할 수 있습니까? 다른 클래스의 메서드를 호출해야합니까? 나는 timertask에서 호출하려고 시도하고 매 시간마다 timertask를 실행하려고 시도했지만, 그 응용 프로그램은 막 중단되었습니다. (한 OnCreate 내부) 다른 이미지 뷰에 대한
드래그 명령 :
box.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
LayoutParams layoutParams = (LayoutParams) box.getLayoutParams();
switch(event.getAction())
{
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_MOVE:
System.out.println(box.getLeft());
int x_cord = (int)event.getRawX();
int y_cord = (int)event.getRawY();
if(x_cord>windowwidth){x_cord=windowwidth;}
if(y_cord>windowheight){y_cord=windowheight;}
layoutParams.leftMargin = x_cord - 250;
layoutParams.topMargin = y_cord - 300;
box.setLayoutParams(layoutParams);
break;
default:
break;
}
return true;
}
});
왜이 방법을 반복적으로 호출 할 것으로 생각합니까? – njzk2