Vielen Dank für die ausführlichen Antworten. Mir ist vieles klarer geworden
.. aber noch nicht alles
zu 1)
das mit den "ich kümmere mich in Zukunft nullundnix um eine gescheite
Speicherfreigabe" find ich gar nicht übel; auch wenn es stark auf die
Performance drückt, werden hier doch automatisch viele Fehlerquellen des
Programmierers verhindert.
zu 2)
Die Idee mit dem FrameLayout war wohl nicht die Glücklichste. Mit einem
eigenen Controll schaut's schon viel besser aus. Übrigens möcht ich zum Start eine Art Schiebepuzzle machen; ich glaub, hier streife ich gleich einige sehr interessante Themen... Was mir nicht so einleuchtet, warum implementierst Du, killphil75, das View.OnTouchListener in die View-Klasse
Zitat
public class PuzzleView extends View implements View.OnTouchListener{
wo doch diese ein OnTouchEvent-Methode zum überschreiben anbietet. Vermutlich geht beides? Ich habs mit beiden Varianten versucht und bin nicht zufrieden. Hier reagiert nur der code vom ACTION_DOWN! Warum das??
public class MainActivity
extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Lade MyView
View myView = new MyView(this);
LinearLayout ll1 = (LinearLayout) findViewById(R.id.LinearLayout1);
ll1.addView(myView);
myView.setFocusable(true);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
Alles anzeigen
soweit trivial, nun wird's aber für mich noch nicht ganz rein:
public class MyView extends
View{
private float x1 = 0, y1 = 0;
private Bitmap bm1;
private Paint sPaint;
private String text;
public MyView(Context context){
super(context);
// Hintergrundbild
this.setBackgroundResource(R.drawable.bm_591_1000);
//Verschiebbild1
bm1 = BitmapFactory.decodeResource(getResources(), R.drawable.bm_72_72);
//InfotextPinsel
sPaint = new Paint();
sPaint.setColor(Color.BLACK);
sPaint.setTextSize(20);
sPaint.setTypeface(Typeface.SERIF);
sPaint.setTextAlign(Align.LEFT);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (bm1 != null) {
canvas.drawBitmap(bm1, x1, y1, null);
}
if (text != null) {
canvas.drawText(text, x1, y1+100, sPaint);
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
x1=event.getX();
y1=event.getY();
text = "x1="+Float.toString(x1) + "; y1=" +
Float.toString(y1);
break;
case MotionEvent.ACTION_MOVE:
x1=event.getX();
y1=event.getY();
text = "x1="+Float.toString(x1) + "; y1=" +
Float.toString(y1) ;
break;
case MotionEvent.ACTION_UP:
x1=event.getX()/2;
y1=event.getY()/2;
text = "x1="+Float.toString(x1) + "; y1=" +
Float.toString(y1);
break;
}
invalidate();
return super.onTouchEvent(event);
}
}
Alles anzeigen
Bei der Variante mit dem Implementieren geht bei gleichem Code gar nix!?!
public class MyView extends View implements View.OnTouchListener{
...
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
x1=event.getX();
y1=event.getY();
text = "x1="+Float.toString(x1) + "; y1=" +
Float.toString(y1);
...
Alles anzeigen
Irgentwas kleines fehlt noch!