Beiträge von Aless_55

    Guten Abend


    Hab da ein kleines Problem beim Ändern der ImageView-Resource. Ich habe nur eine Activity-Klasse und eine Custom View-Klasse. Im Custom View wird via OnTouchEvent die Berührung gehanhabt und dann in den Hilfsklassen der Custom View Klasse weiter verarbeitet. Diese Lauten FlaechenAuswahl und ImageChanger. Nun möchte ich im ImageChanger das Bild , je nach Berührungsort des CustomView, ändern. Jedoch bring ich das einfach nicht hin, momentan gibt es zwar keinen Fehler mehr aus, das Bild ändert sich trotzdem nicht...
    Zur besseren Übersicht nehme ich alle bisherigen Versuche raus und lasse meine Hauptüberlegung einfach drin, damit es etwas übersichtlicher wird. Bei dieser Variante wird die 2. If-Bedigung in der Changer-Methode nicht eintreten, da das imgV = null ist.(Ohne die 2. Bedigung gäbe es eine FATAL EXCEPTION: main java.lang.NullPointerException).


    Daraus lässt sich schliessen, dass nicht richtig auf das ImageView Objekt zugegriffen wurde. Könnte dies mit dem Context im Zusammenhang liegen?
    Besten Dank



    Hallo Zusammen


    Ich habe ein kleines Problem.
    Ich habe eine onClick Methode, in dieser wird eine Variable bei jedem Klick um 1 erhöht. Diese Variable soll nun in eine anderen Klasse in einem TextView dargestellt werden.
    In dieser 2. Klasse gibt es einen Button refresh, bei dem der Wert der im Textfeld angezeigt werden soll aktualisiert wird.


    Ich habe das eigentliche Problem gefunden! Das Problem ist nicht der Zugriff sondern das Aktualisieren der Anzeige, nachdem der Button geklickt wurde, wird zwar die Variable aktualisiert aber der Bildschirm nicht!


    Variable bereitstellen:


    Java
    public static int getSmashValue(){
    
    
    int smashC = smashValue;
    return smashC;
    }


    Variable um eins erhöhen:


    Java
    public void onClick(View v){
    			
        	if(b1==v){
        	smashValue ++;
        	
        	farbe = 1;  
    	}


    2. Klasse


    Beim Klick auf den Button auf den Wert zugreiffen...

    Java
    public void onClick(View v){
        		
        		if(b99==v){
        			theValue = SecondFragment.getSmashValue();
        			
        			
            	}

    Hab hier meinen Code, einmal die Main Activity und das andere Mal meine View Klasse. Ich übergebe den Wert "counter" vom View an meine Activity, dies kein Problem. "count" ändert sich ständig im View, in meiner Main Activity wird aber nur der Anfangswert den "count" bei der ersten Übergabe hatte übernommen, in diesem Falle 1. Meine Frage ist nun warum es diesen Wert nicht aktualisiert, denn nach jeder Touch-Berührung wird count um 1 grösser, also sollte auch der übergebene Wert um 1 grösser werden..


    MainActivity:



    View Klasse


    Hallo Zusammen


    Ich habe hier meinen Code der Linien macht in zufälligen Farben. Nun hab ich 3 Buttons zum Layout hinzugefügt welche einen jeweiligen Wert besitzen, Button1 = 1, 2 =2 und 3 = 3, nun muss ich diese Werte in meiner View - Klasse aufrufen können und benutzen können um dort die Farbe zu verändern.
    Ich habe bereits etwas mit getter und setter, sowohl intents probiert, bin bis anhin aber erfolglos geblieben...
    Wäre um Hilfe dankbar!


    Hauptklasse


    HauptLayout

    Java
    <?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"	android:layout_width="match_parent"	android:layout_height="match_parent"	android:orientation="vertical" >	<com.example.drawproject.DrawArea	android:layout_width="match_parent"	android:layout_height="match_parent"	android:layout_below="@+id/button1" /><Button	android:id="@+id/button1"	android:layout_width="wrap_content"	android:layout_height="wrap_content"	android:layout_alignParentLeft="true"	android:layout_alignParentTop="true"	android:layout_marginLeft="84dp"	android:layout_marginTop="79dp"	android:text="Yellow" /><Button	android:id="@+id/button2"	android:layout_width="wrap_content"	android:layout_height="wrap_content"	android:layout_alignBaseline="@+id/button1"	android:layout_alignBottom="@+id/button1"	android:layout_marginLeft="165dp"	android:layout_toRightOf="@+id/button1"	android:text="Blue" /><Button	android:id="@+id/button3"	android:layout_width="wrap_content"	android:layout_height="wrap_content"	android:layout_alignBottom="@+id/button2"	android:layout_alignParentRight="true"	android:layout_marginRight="134dp"	android:text="Green" /></RelativeLayout>


    View Klasse


    Java
    package com.example.drawproject;import android.content.Context;import android.graphics.*;import android.util.AttributeSet;import android.util.SparseArray;import android.view.MotionEvent;import android.view.View;import java.util.ArrayList;import java.util.List;import java.util.Random;public class DrawArea extends View {private List<Stroke> _allStrokes; //all strokes that need to be drawnprivate SparseArray<Stroke> _activeStrokes; //use to retrieve the currently drawn strokesprivate Random _rdmColor = new Random();int count = 1;public DrawArea(Context context, AttributeSet attrs) {	super(context, attrs);	_allStrokes = new ArrayList<Stroke>();	_activeStrokes = new SparseArray<Stroke>();	setFocusable(true);	setFocusableInTouchMode(true);}public void onDraw(Canvas canvas) {	if (_allStrokes != null) {    	for (Stroke stroke: _allStrokes) {        	if (stroke != null) {            	Path path = stroke.getPath();            	Paint painter = stroke.getPaint();            	if ((path != null) && (painter != null)) {                	if(count%2 != 0){                	canvas.drawPath(path, painter);                	}            	}        	}    	}	}}@Overridepublic boolean onTouchEvent(MotionEvent event) {	final int action = event.getActionMasked();	final int pointerCount = event.getPointerCount();	switch (action) {    	case MotionEvent.ACTION_DOWN: {        	count++;        	if(count%2 != 1)        	{pointDown((int)event.getX(), (int)event.getY(), event.getPointerId(0));        	break;        	}        	if (count%2 != 0){            	for (int pc = 0; pc < pointerCount; pc++) {                	pointDown((int)event.getX(pc), (int)event.getY(pc), event.getPointerId(pc));    	}        	}    	}    	case MotionEvent.ACTION_MOVE: {        	break;    	}    	case MotionEvent.ACTION_UP: {        	break;    	}	}	invalidate();	return true;}private void pointDown(int x, int y, int id) {	if(count%2 !=1){	//create a paint with random color	Paint paint = new Paint();	paint.setStyle(Paint.Style.STROKE);	paint.setStrokeWidth(10);	paint.setColor(_rdmColor.nextInt()); //Here should the values be added!	//create the Stroke	Point pt = new Point(x, y);	Stroke stroke = new Stroke(paint);	stroke.addPoint(pt);	_activeStrokes.put(id, stroke);	_allStrokes.add(stroke);	}	if (count%2 != 0){	//retrieve the stroke and add new point to its path	Stroke stroke = _activeStrokes.get(id);	if (stroke != null) {    	Point pt = new Point(x, y);    	stroke.addPoint(pt);	}	}}}


    Zusatz View Klasse

    Java
    package com.example.drawproject;import android.graphics.Paint;import android.graphics.Path;import android.graphics.Point;public class Stroke {	private Path _path;	private Paint _paint;	public Stroke (Paint paint) {    	_paint = paint;	}	public Path getPath() {    	return _path;	}	public Paint getPaint() {    	return _paint;	}	public void addPoint(Point pt) {    	if (_path == null) {        	_path = new Path();        	_path.moveTo(pt.x, pt.y);    	} else {        	_path.lineTo(pt.x, pt.y);    	}	}}


    Ich hab nur das Problem gehbat, dass es mir die funktion der View, das Zeichnen nicht angezeigt, hatte, hab das so eingefügt!


    Java
    <com.example.volleyballapp.ViewFeld
      	android:id="@+id/linienView"
      	android:layout_width="match_parent"
      	android:layout_height="match_parent"
      	android:layout_alignTop="@+id/view2"
       	/>


    Die Lösung war, dass ich es am End meines Layouts einfügen musste, ich wollte nix vorgekaut bekommen, dachte nur, dass ich einen Fehler gemacht habe im Code ;))

    Hallo Leute


    Ich bins schon wieder^^, diesmal mit der Frage wie ich meine View Klasse in meiner Activity aufrufen kann. Ich habe eine Activity die beim drücken des Knopfes: Neues Feld aufgerufen wird, diese Activity wird dann geöffnet und beinhaltet das Layout: Feldlayout. Nun hab ich eine View-kLasse: ViewFeld die in der FeldLayout-Activity geöffnet werden soll, um benutzt zu werden.


    Kann mir jemand sagen wie ich das machen kann oder mir einen Tipp geben was ich dafür benötige?


    Feldlayout.class



    Feldlayout.xml


    Java
    <?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"	android:layout_width="match_parent"	android:layout_height="match_parent"	android:background="@color/farbe"	android:orientation="vertical" >	  <ImageView  	android:id="@+id/view2"  	android:layout_width="match_parent"  	android:layout_height="match_parent"  	android:layout_marginBottom="70dp"  	android:layout_marginLeft="70dp"  	android:layout_marginRight="70dp"  	android:layout_marginTop="160dp"  	android:background="@drawable/whiterectangle" /> 	<ImageView     	android:id="@+id/view1"     	android:layout_width="match_parent"     	android:layout_height="match_parent"     	android:layout_marginBottom="74dp"     	android:layout_marginLeft="74dp"     	android:layout_marginRight="74dp"     	android:layout_marginTop="164dp"     	android:background="@drawable/volleyballfeld" /> 	<ImageView     	android:id="@+id/view3meterlinie"     	android:layout_width="match_parent"     	android:layout_height="4dp"     	android:layout_alignTop="@+id/view1"     	android:layout_marginLeft="70dp"     	android:layout_marginRight="70dp"     	android:layout_marginTop="100dp"     	android:background="@drawable/dreimeterlinie" /> 	<ImageView     	android:id="@+id/netz"     	android:layout_width="match_parent"     	android:layout_height="4dp"     	android:layout_alignTop="@+id/view1"     	android:layout_marginLeft="20dp"     	android:layout_marginRight="20dp"     	android:layout_marginTop="310dp"     	android:background="@drawable/netz" /> 	 	<ImageView     	android:id="@+id/view3meterliniedef"     	android:layout_width="match_parent"     	android:layout_height="4dp"     	android:layout_alignTop="@+id/view1"     	android:layout_marginLeft="70dp"     	android:layout_marginRight="70dp"     	android:layout_marginTop="520dp"     	android:background="@drawable/dreimeterlinie" /> 	 	<Button     	android:id="@+id/button8"     	style="@style/HomeText"     	android:layout_width="140dp"     	android:layout_height="85dp"     	android:layout_alignParentTop="true"     	android:layout_alignRight="@+id/view1"     	android:layout_marginTop="1dp"     	android:background="@drawable/bnt_black"     	android:text="Speichern" /> 	 	<Button     	android:id="@+id/button7"     	style="@style/HomeText"     	android:layout_width="140dp"     	android:layout_height="85dp"     	android:layout_alignLeft="@+id/view2"     	android:layout_alignParentTop="true"     	android:layout_marginTop="1dp"     	android:background="@drawable/bnt_black"     	android:onClick="home"     	android:text="Zurück" /> 	<Button     	android:id="@+id/button9"     	style="@style/HomeText"     	android:layout_width="140dp"     	android:layout_height="85dp"     	android:layout_alignTop="@+id/button7"     	android:layout_marginLeft="35dp"     	android:layout_toRightOf="@+id/button7"     	android:background="@drawable/bnt_black"     	android:text="Linien Anzeigen" /> 	<Button     	android:id="@+id/Statistik"     	style="@style/HomeText"     	android:layout_width="140dp"     	android:layout_height="85dp"     	android:layout_alignBaseline="@+id/button8"     	android:layout_alignBottom="@+id/button8"     	android:layout_marginRight="31dp"     	android:layout_toLeftOf="@+id/button8"     	android:background="@drawable/bnt_black"     	android:text="Statistik" />	</RelativeLayout>


    ViewFeld.class


    Java
    package com.example.volleyballapp;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Path;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;public class ViewFeld extends View{	 private Paint paint = new Paint();	  private Path path = new Path();	  int count = 1;		public ViewFeld(Context context, AttributeSet attrs) {		super(context, attrs);		// TODO Auto-generated constructor stub		paint.setAntiAlias(true);		paint.setStrokeWidth(6f);       	//Breite des Strichs		paint.setColor(Color.BLACK);    	//Farbe des Strichs 		paint.setStyle(Paint.Style.STROKE);		paint.setStrokeJoin(Paint.Join.ROUND);			  }	protected void onDraw(Canvas canvas) {				if ((count%2 != 0)){		canvas.drawPath(path, paint);}	  }	  @Override	  public boolean onTouchEvent(MotionEvent event) {		float eventX = event.getX();		float eventY = event.getY();				switch (event.getAction()) {		case MotionEvent.ACTION_DOWN:	  				count++;	    	if(count%2 != 1){			path.moveTo(eventX, eventY);	  	return true;	    	}	    	if(count%2 != 0){	    	path.lineTo(eventX, eventY);	    	break;	    	}		case MotionEvent.ACTION_MOVE:	 		  	break;		case MotionEvent.ACTION_UP:	  	// nothing to do	  	break;		default:	  	return false;		}		// Schedules a repaint.		invalidate();		return true;	  }		}


    Hallo Zusammen


    Ich bekomme vom onTouchEvent Punkte, immer nach 2 Punkten soll eine Linie gezogen werden, dies zwischen den nacheinander folgenden Punkten. Diese Linie sollte dann aber bestehen bleiben, das heisst, dass zwar eine neue hinzu kommt, die alte aber bestehen bleibt. Nun dies ist mein Problem. Ich kann zwar eine Linie machen, diese bleibt aber nicht bestehen!


    Kann mir jemand erklären wie ich das hinkriege?


    Edit: So funktioniert es nun, mit Paths klappt es perfekt! Hier ist der Code der funktioniert!