# variable public machen...



## tomovic (13. Jul 2014)

hallo,
ich möchte gerne meine Variable public machen, bin zu bölde dazu...
Sie heist xpos.
Mein Ziel:
ich mache einen Touch auf mein Dispaly und der Startpunkt von meiner Linie verändert sich.


```
package de.carpelibrum.grafik;

import android.os.Bundle;
import android.app.Activity;
import android.graphics.Color;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.ViewGroup.LayoutParams;
import android.widget.RelativeLayout;

public class GrafikActivity extends Activity{

	public float xpos = 1; // <-----------------------------------hier
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_grafik);  

	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.grafik, menu);
		return true;
	}
	public boolean onTouchEvent(MotionEvent event) {
	    int eventaction = event.getAction();

	    switch (eventaction) {
	        case MotionEvent.ACTION_DOWN: 
	        
	            break;

	        case MotionEvent.ACTION_MOVE:
	        	xpos = (int)event.getX();   <<--------------------hier	        	
        	       	
	            break;

	        case MotionEvent.ACTION_UP:   
	            // finger leaves the screen
	            break;
	    }

	    // tell the system that we handled the event and no further processing is required
	    return true; 
	}

}
```

mein view:


```
package de.carpelibrum.grafik;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.widget.ImageView;

public class ZeichnenView extends ImageView {


	public ZeichnenView(Context context, AttributeSet attrs) {
		super(context, attrs);		
	}

	@Override
	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);
		
		// 1. Paint-Objekt für Blauton und 
		// Linienbreite von 5 Pixeln erzeugen
		Paint pinsel = new Paint();
		pinsel.setColor(Color.rgb(64, 64, 255));
		pinsel.setStrokeWidth(5);
		
		
		// Diagonale durch Leinwand zeichnen
		canvas.drawLine(xpos , 0, getWidth(), getHeight(), pinsel); <------------hier
	}
}
```


----------



## Topfpflanze (13. Jul 2014)

Die variable *ist* public. Wo ist das Problem?


----------



## tomovic (13. Jul 2014)

```
canvas.drawLine(xpos , 0, getWidth(), getHeight(), pinsel);
```
Eclipse bietet mir an "create an new Variable". ----> xpos


----------



## JavaMeister (13. Jul 2014)

Ja, weil das so in java nicht funktioniert.

Bitte lese Dir die Grundlagen nochmal an.

Du benötigst eine Referenz auf das Objekt der Klasse, die diese public Variable enthält.


----------



## tomovic (13. Jul 2014)

sorry aber ich seig da nicht ganz durch, bin nicht lesefaul, vielleicht denke ich zuviel in c++ 

was ich verstanden habe ist, dass ich in der Klasse GrafikActivity ein Objekt anlegen soll mit:
de.carpelibrum.grafik.GrafikActivity = new posx(); // so ungefär ?!?! Aber in Rot.
Dann erhalte ich eine Referanzvariable, sagt mein Bauchgefühl. Dann verliere ich den Faden.


----------



## dzim (14. Jul 2014)

Also wenn du nicht Lesefaul bist, dann lies dir wirklich noch mal die Grundlagen durch. Auch in C++ legt man nicht ein Objekt eines Primitiven Datentypen an.
Und 
	
	
	
	





```
GrafikActivity = new posx();
```
... WTF!?
Wenn, dann 
	
	
	
	





```
GrafikActivity = new GrafikActivity(); xpos = 0.0;
```
, was aber auch aus Android-Sicht völliger Quark wäre, denn man instanziert keine Activities, das macht die Platform (Activities werden i.d.R. über einen Intent gestartet).


----------

