我的应用程序有问题。 因此,当我运行它并触摸背景上的任意位置时,它会崩溃,我的 应用程序关闭。
我不知道错误在哪里,因为我多次查看了我的代码。
该应用程序来自我的Java学习书籍。 我输入了每本书中的每一行。 但是仍然找不到错误
package com.example.buggy1;
import android.annotation.SuppressLint;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
import java.util.Random;
import static com.example.buggy1.R.drawable.kaefer;
public class MainActivity extends AppCompatActivity {
private int xStart, yStart, xZiel, yZiel;
private int xLinks, yOben, xRechts, yUnten;
private double Winkel;
private Boolean An = true;
private ImageView Insekt;
private void setLimits(){
xLinks = 35;
yOben = 35;
xRechts = (int) (getResources().getDisplayMetrics().widthPixels* 0.74f);
yUnten = (int) (getResources().getDisplayMetrics().heightPixels* 0.74f);
}
private void setDestination(){
Random Zufall = new Random();
xZiel = Zufall.nextInt(xRechts);
yZiel = Zufall.nextInt(yUnten);
}
private void getDirection(){
// Distanz ermtteln
int xDiff = xZiel - xStart;
int yDiff = yZiel - yStart;
// Winkel berechnen
Winkel = Math.atan2(xDiff, -yDiff);
Winkel = Math.toDegrees(Winkel);
}
private void moveObject(ImageView view){
// Ziel-Position setzen
setDestination();
// Richtung ermitteln
getDirection();
// Objekt holen und drehen und verschieben
view.setImageResource(R.drawable.kaefer);
view.setRotation((float)Winkel);
view.animate().x(xZiel).y(yZiel).setDuration(500);
// Startpunk neu setzen
xStart = xZiel;
yStart = yZiel;
}
private Handler handler = new Handler();
private Runnable runnable = new Runnable() {
@Override
public void run() {
moveObject(Insekt);
handler.postDelayed(this, 500);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Komponente
ImageView Insekt = (ImageView) findViewById(R.id.imageView);
final ImageView Hgrund = (ImageView) findViewById(R.id.imageView2);
// Displaygrenzen
setLimits();
xStart = xRechts/4;
yStart = yUnten/4;
Hgrund.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
// Auftrag übernehmen/ausführen
if (An)
handler.post(runnable);
// Auftrag beenden
else
handler.removeCallbacks(runnable);
// Umschalten
An = !An;
// Rückgabewert
return false;
}
});
}
}