이미지 뷰 (공)가 레이아웃을 돌아 다니고 buttom을 눌렀을 때 멈추기 전에 여러 번 튀어 나오려고한다. 비록 로그캣이 일어난다 고 말하지만, 움직이지는 않는다.이미지 뷰가 움직이지 않는다
는 여기가
public class BallPhisics {
int x =400;
int y = 0;
boolean bounceX = false;
boolean bounceY= false;
int counter =0;
ImageView object;
public BallPhisics(ImageView i){
object=i;
}
public void applyMovement() {
while (true) {
object.setLeft((int) object.getX()+x); //i know i shouldnt use pixels
Log.d("EVENT", "X moved"); Log.d("Ended",Integer.toString(object.getLeft()));
object.setBottom((int)(object.getY() + y));
Log.d("EVENT", "Y moved");
try {
Thread.sleep(1000);
Log.d("EVENT", "Time 1 used");
} catch(InterruptedException ex) {
Thread.currentThread().interrupt();
}
if (object.getX()<=50||(object.getRight()<=50)){
bounceX =true;
break;
}
if (object.getY()<=50||object.getTop()<=50){
bounceY=true;
break;
}
}
this.bouncing();
}
public void bouncing(){
Log.d("EVENT", "Bouncing!!");
if (bounceX&&bounceY){
x=-x;
y=-y;
}
else if (bounceX){
x=-x;
y=(int)(Math.random()*100- 50 +y);
}
else if (bounceY) {
x = (int) (Math.random() * 100 - 50 + x);
y = -y;
}
counter++;
if(counter==5){return;}
this.applyMovement();
}
그리고 mainActivity에 onclick 이벤트
입니다.public void StartBall (View view){
ImageView imageview=(ImageView) findViewById(R.id.imageView);
BallPhisics phisics = new BallPhisics(imageview);
Log.d("EVENT", Integer.toString(imageview.getLeft())+" before");
phisics.applyMovement();
Log.d("EVENT",Integer.toString(imageview.getLeft())+" after");
}
죄송합니다. 그런데 누군가는보기를 움직이는 적절한 방법을 알고 있습니까? 사전에
감사 아마 setLeft (int left)
, 또는이 메소드가 레이아웃 시스템에 의해 호출하기위한 것입니다 일반적으로 다른 호출 할 수 없습니다 때문에 setBottom (int bottom)
, according to the documentation을 사용하는 것이 좋습니다 아니에요보기를 이동하는 모든
while (true) 및 ui 스레드의 Thread.sleep은 나쁜 생각이 있습니다. – Blackbelt
예,하지만 이것은 단지 실험입니다. –
왜 제발? 확실하지 않습니다. logcat은 아무렇지도 않은 것 같습니다 –