Java(Android) clear deaktivieren

06/15/2014 20:56 TeraTroll#1
Guten Abend mal wieder,

ich stoße mal wieder an ein Problem, ich habe eine App geschrieben in welcher ein roter Bildschirm mit einem kleinen gelben "Ball" auftaucht. Wenn ich irgendwo auf den Bildschirm drücke/tappe springt der "Ball" dort hin bzw. es wird die Position gewechselt und der Bildschirm neu geladen wodurch der "alte Ball" nicht mehr zu sehen ist, ich möchte jedoch , dass dieser noch zu sehen ist und ich sozusagen "malen" kann wie stelle ich es also nun ab das die "Bälle" wieder gelöscht werden?
06/16/2014 22:35 strubelz#2
Du kannst doch einfach einen neuen Ball dort spawnen, wo du hintippst.
06/21/2014 14:41 TeraTroll#3
Jedoch wie? Dafür müsste ich in einem onTouch event auf die onDraw Methode zugreifen, dass geht allerdings nicht und wie kann ich automatisch eine neue RectF Variable erstellen?

MfG Joshi
06/21/2014 18:10 xXKonaXx#4
Mach einfach eine Liste in die bei jeder Berührung ein neues Element mit den Koordinaten hinzugefügt wird, dann gehst du diese Liste in der draw Methode durch.
06/21/2014 18:56 TeraTroll#5
Mit beispielsweise einem Array?
06/22/2014 11:30 xXKonaXx#6
Mach dir eine ArrayList von "Point" =

Über liste.add([POINT]); und liste.remove(XX); kannst du dann während der Laufzeit die Koordinaten mittels "Point" in die Liste speichern oder entfernen.
06/22/2014 15:23 TeraTroll#7
Ahhh vielen dank habe es mit nem Array ausprobiert und zwei sich steigenden Variablen und Wertzuweisung jedoch startet die App dann garnicht mehr ^^.

Was ist mit "Point" gemeint die X und Y Coordinate als Graph oder wie kann ich mir das vorstellen?

Bzw. wie ist es möglich zwei Koordinaten in einen Punkt zu "konvertieren"?
06/22/2014 15:39 xXKonaXx#8
Es gibt in Java eine Klasse die heißt "Point". Dort kannst du die X und Y Koordinaten ablegen.

Code:
Point punkt1 = new Point(50, 50);

int x = punkt1.x; 
int y = punkt1.y;
06/22/2014 15:49 TeraTroll#9
Jetzt kommt aber das Problem dass ich zum zeichen RectF nutzen muss welches mit float Daten funktioniert und nicht mit Point O.o.
Dass das so kompliziert ist hätte ich nicht gedacht....

06/22/2014 15:59 xXKonaXx#10
Point hat 2 Variablen, einmal X und dann noch Y. Die kannst du einfach über deinPoint.x/y; abrufen, dass liefert dir dann einen Integer zurück... der Integer passt immer in eine float Variable.

Code:
private Point deinPunkt = new Point(deinXWert, deinYWert);
private float BallX = deinPunkt.x;
private float BallY = deinPunkt.y;
private RectF ballbounds;
.
.
.
ballbounds.set(BallX-ballradius, BallY-ballradius, BallX+ballradius, BallY+ballradius);
06/22/2014 16:22 TeraTroll#11
Es funktioniert nun garnichts mehr haha.....wärest du eventuell so freundlich und würdest dir den Code mal ansehen? =))
06/22/2014 16:35 xXKonaXx#12
Was genau geht denn nicht?
So sollte es funktionieren:
06/22/2014 16:40 TeraTroll#13
Die App schließt sich direkt nachdem Starten und LogCat spuckt einen NullExceptionError aus ^^

*_* VIELEN DANK!!!! ES FUNKTIONIERT TATSÄCHLICH!!!!

Wollte nun alles in die Main packen damit ich auch den GestureDetector verwenden kann jedoch will das nicht so ganz.
06/23/2014 08:48 xXKonaXx#14
Du hast die for-each auskommentiert, so haben BallX und BallY immer den selben am Anfang zugeteilten Wert.

Code:
package com.terratroll.draw;

import java.util.ArrayList;

import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
import android.graphics.RectF;
import android.os.Bundle;
import android.support.v4.view.MotionEventCompat;
import android.view.GestureDetector;
import android.view.GestureDetector.OnDoubleTapListener;
import android.view.GestureDetector.OnGestureListener;
import android.view.MotionEvent;
import android.view.View;
  
//Implement this interface to be notified when a gesture occurs  
public class MainActivity extends Activity implements OnGestureListener  
{  
    //creates a Gesture Detector  
    private GestureDetector gd; 
	private float ballradius = 65;
    private RectF ballbounds;
	private	Paint paint;
	private	float BallX = ballradius + 180;
	private	float BallY = ballradius + 280;
	private	ArrayList<Point> liste = new ArrayList<Point>();
	private	float tapX;
	private	float tapY;

  
    /** Called when the activity is first created. */  
    @Override  
    public void onCreate(Bundle savedInstanceState)  
    {  
        super.onCreate(savedInstanceState);  
        View drawView = new View(this);
        setContentView(drawView);  
        drawView.setBackgroundColor(Color.RED);
  
        //initialize the Gesture Detector  
        gd = new GestureDetector(this);  
  
        //set the on Double tap listener  
        gd.setOnDoubleTapListener(new OnDoubleTapListener()  
        {  
            @Override  
            public boolean onDoubleTap(MotionEvent e)  
            {  
                //set text color to green   
                return false;  
            }  
  
            @Override  
            public boolean onDoubleTapEvent(MotionEvent e)  
            {  
                //if the second tap hadn't been released and it's being moved  
                if(e.getAction() == MotionEvent.ACTION_MOVE)  
                {  
                     
                }  
                else if(e.getAction() == MotionEvent.ACTION_UP)//user released the screen  
                {  
                }  
                return false;  
            }  
  
            @Override  
            public boolean onSingleTapConfirmed(MotionEvent e)  
            {  
                
                return false;  
            }  
        });  
    }  
    
public class drawView extends View{

	public drawView(Context context) {
		super(context);		

	}
	protected void onDraw(Canvas canvas){
		super.onDraw(canvas);

		ballbounds = new RectF();
		paint = new Paint();
		paint.setColor(Color.YELLOW);
		for(Point p : liste){ //Die Liste mit einer For-Each Schleife durchlaufen

			if(p.x != 0 && p.y != 0){
	                BallX = p.x;
	                BallY = p.y;}
			
			ballbounds.set(BallX-ballradius, BallY-ballradius, BallX+ballradius, BallY+ballradius);
			canvas.drawOval(ballbounds, paint);	
			}
		      try {  
		          Thread.sleep(30);  
		       } catch (InterruptedException e) { }
		       
		       invalidate();  // Force a re-draw
		
	}
	
}
  
    @Override  
    public boolean onTouchEvent(MotionEvent event)  
    {  
    	

    	switch(event.getActionMasked()){
    	case MotionEvent.ACTION_MOVE:
  	      tapX = event.getX();
	      tapY = event.getY();

	      liste.add(new Point( (int)tapX, (int)tapY) ); //Der Liste einen neuen Punkt hinzufügen

    	}
        return true; 
    }  
  
    @Override  
    public boolean onDown(MotionEvent e)  
    {  
        return false;  
    }  
  
    @Override  
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)  
    {  
        return false;  
    }  
  
    @Override  
    public void onLongPress(MotionEvent e)  
    {  
    }  
  
    @Override  
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)  
    {  
        return false;  
    }  
  
    @Override  
    public void onShowPress(MotionEvent e)  
    {  
    }  
  
    @Override  
    public boolean onSingleTapUp(MotionEvent e)  
    {  
        return false;  
    }  
}
Nichts gegen dich, aber du solltest dir den Code selbst schreiben und nicht Codefetzen aus Foren benutzen.
06/23/2014 18:56 TeraTroll#15
Ja damit hast du warscheinlich Recht :/ ich brauchen wohl einfach mehr Zeit zum lernen ^^ wie lange machst du das schon?