Ich habe mich jetzt heute den Ganzen Tag damit beschäftigt und evtl. habe ich es jetzt rellativ verstanden.
Und zwar stelle ich es mir so vor das ich eine Inferface Klasse mache, in welcher ich die beiden Objekte initialisiere und dem Balken auch das imageview aus der xml zuweise.
Dann gibt es die gameLopist, welche von der Schnittstellenklasse erbt, in welcher der Thread geöfnet wird, wo die Klasse gameView ausführt, in welcher die onDraw dan ausgeführt wird. In dieser wird der ball, welcher durch das bild läuft dann auch gezeichnet.
Dann noch die Hug klasse, welche von gameView erbt und in dieser werden die bewrührungen gezählt, also die tie toore kann man sagen und geschaut wann fertig ist.
Habe ich das so untegefähr richtig verstanden?
Ich hatte auch so in etwa ein klassendiagramm gemacht... es ist jetzt nicht normgerecht, aber soll etwa verdeutlichen wie ich mri das projekt vorstelle:
Auch versucht habe ich schon ein etwas abgewandeltes projekt, in welchem auch von der einen klasse ein thread der anderen aufgerufen wird, aber da funktioniert noch eine übergabe einer Variablen info nicht.
Es handelt sich um folgenden Code:
MainActivity.java
package com.example.threadtest;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity {
private static final String TAG = MainActivity.class.getSimpleName(); //MyThreadExample1Activity
private Button bStart;
private Button bReset;
public TextView tvStatus;
private Handler handler;
private Counter worker;
private Thread workthread;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activty_main);
handler = new Handler();
bStart = (Button) findViewById(R.id.main_b_start);
bReset = (Button) findViewById(R.id.main_b_reset);
tvStatus = (TextView) findViewById(R.id.main_tv_status);
worker = new Counter();
workthread = new Thread(worker);
worker.setPause(true);
bStart.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Thread.State status = workthread.getState();
Log.d(TAG, "status: " + status);
if (Thread.State.NEW.equals(status)) {
// first start
Log.d(TAG, "start");
workthread.start();
setButtonMsg("pause");
bReset.setEnabled(true);
} else {
if (worker.isPause()) {
Log.d(TAG, "weiter");
worker.setPause(false);
bReset.setEnabled(false);
setButtonMsg(getString(R.string.pause));
} else {
Log.d(TAG, "pause");
worker.setPause(true);
bReset.setEnabled(true);
setButtonMsg(getString(R.string.weiter));
}
}
}
});
bReset.setEnabled(false);
bReset.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(worker.isPause()){
worker.reset();
Log.d(TAG, getString(R.string.pause));
setButtonMsg(getString(R.string.start));
}
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onDestroy() {
super.onDestroy();
workthread.interrupt();
workthread = null;
}
private void setButtonMsg(final String msg) {
handler.post(new Runnable() {
@Override
public void run() {
if (msg == null) {
bStart.setText("");
} else {
bStart.setText(msg);
}
}
});
}
}
Counter.java
package com.example.threadtest;
import android.os.Handler;
import android.widget.TextView;
public class Counter implements Runnable { //private
private int result = 0;
private boolean pause = false;
@Override
public void run() {
pause = false;
result = 0;
while (true) {
if (pause) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
}
continue;
}
result++;
result = result % 100;
//Diesen erkennt er nicht, bzw. kann er nicht von der Anderen klasse verwenden, aber ich kann ihn hier auch nicht nochmal deklarieren, das geht auch nciht
handler.post(new Runnable() {
@Override
public void run() {
//Und hier ist es das selbe
tvStatusNeu.setText("" + result);
}
});
try {
Thread.sleep(500);
} catch (InterruptedException e) {
}
}
}
public void setPause(boolean pause) {
this.pause = pause;
}
public boolean isPause() {
return pause;
}
public void reset() {
this.result = 0;
handler.post(new Runnable() {
@Override
public void run() {
tvStatusNeu.setText("" + result);
}
});
}
}
Bin Dankbar über jeden Hinweis und hilfe
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.