Jetzt kostenlos registrieren. Mitglieder surfen ohne Werbung auf Android-Hilfe.de!
Zurück   Android-Hilfe.de > Android Developer > Android App Entwicklung

RelativeLayout onDraw wird nicht aufgerufen

Das Thema "RelativeLayout onDraw wird nicht aufgerufen" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.


Antwort

 

Themen-Optionen Ansicht
Alt 25.12.2011, 16:17   #1 (permalink)
Junior Mitglied

Registriert seit: 02.03.2011
Beiträge: 37
Abgegebene Danke: 0
Erhielt 1 Danke für 1 Beitrag
Standard RelativeLayout onDraw wird nicht aufgerufen

Ich implementiere gerade Drag&Drop in einem RelativeLayout..

Jetzt möchte ich das nach dem onTouchEvent das RelativeLayout neu gezeichnet wird, bzw. nur die Views.. damit man auch sieht das sich die Drawable Shape bewegt..

Jedoch funktioniert weder invalidate() noch requestLayout() am Ende der onTouchEvent Methode.

onDraw wird einfach nicht aufgerufen...

Kann mir da bitte jemand helfen?
krackmoe ist offline   Mit Zitat antworten
Alt 25.12.2011, 17:57   #2 (permalink)
Android Experte
 
Benutzerbild von DieGoldeneMitte

Registriert seit: 05.02.2010
Beiträge: 609
Abgegebene Danke: 75
Erhielt 136 Danke für 119 Beiträge
Standard AW: RelativeLayout onDraw wird nicht aufgerufen

Bist du sicher, dass der onTouchEvent aufgerufen wird? I meine mich zu entsinnen, dass der gar keine TouchEvents empfängt, da die in den inneren Views landen.
__________________
Kein Support via PN/eMail. Bitte das Forum benutzen - dort haben alle etwas davon.
Bei Entwicklerfragen zu abstürzenden Apps bitte immer die Ausgabe von LogCat posten.
Tipp: Zum "Danke" sagen gibt es einen Button.
DieGoldeneMitte ist offline   Mit Zitat antworten
Alt 25.12.2011, 18:34   #3 (permalink)
Junior Mitglied

Registriert seit: 02.03.2011
Beiträge: 37
Abgegebene Danke: 0
Erhielt 1 Danke für 1 Beitrag
Standard AW: RelativeLayout onDraw wird nicht aufgerufen

Ja onTouch wird ganz sicher aufgerufen, hab dort einige Log Meldungen eingebaut, außerdem bekomm ich die Positionen zurück..

Ich zeig euch mal meinen code...

Code:
public class DrawView extends RelativeLayout {
	private ArrayList<Rectangle> rectangles = new ArrayList<Rectangle>();
	private int rectId = 0;
	private int width;
	private int height;
	
	public DrawView(Context context) {
		super(context);		
		
		//RelativeLayout layout = new RelativeLayout(context);
		this.setLayoutParams(new RelativeLayout.LayoutParams(width, height));		
		
		Rectangle rect1 = new Rectangle(this.getContext());
		rect1.setId(1);
		rectangles.add(rect1);
		this.addView(rect1);
		
		RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
		params.setMargins(0, 10, 0, 0);
		Rectangle rect2 = new Rectangle(this.getContext());
		rect2.setId(2);
		params.addRule(RelativeLayout.BELOW, rect1.getId());    
		rect2.setLayoutParams(params);	
		rectangles.add(rect2);
		this.addView(rect2);

		
		
	}

	@Override
	protected void onDraw(Canvas canvas) {
		Log.i("ondraw","yes"+rectangles.size());
		
		for(Rectangle v: rectangles){
			Paint paint = new Paint();
			paint.setColor(Color.GREEN);
			Log.i("draw", ""+v.getTop());
			Log.i("draw", ""+v.getLeft());
			canvas.drawRect((float)v.getX(),(float) v.getY(),(float) v.getX()+150, (float)v.getY()+50, paint);
		}
	}

	@Override
	public boolean onTouchEvent(MotionEvent event) {
		
		int x = (int) event.getX();
		int y = (int) event.getY();	
		
		switch(event.getAction()){
			case MotionEvent.ACTION_DOWN:
						
				rectId = 0;
				
				for(int i=0; i < rectangles.size(); i++){
					View child = rectangles.get(i);
					if(x > child.getLeft() && x < child.getLeft()+150 && y > child.getTop() && y < child.getTop()+50){
						rectId = child.getId();
						rectangles.get(rectId-1).setTop(child.getTop());
						rectangles.get(rectId-1).setLeft(child.getLeft());
						break;
					}				
				}
				break;
			case MotionEvent.ACTION_MOVE:
				
				if(rectId > 0){
					rectangles.get(rectId-1).setBackgroundRessource(true);
					rectangles.get(rectId-1).setTop(y-25);
					rectangles.get(rectId-1).setLeft(x-25);
					Log.i("MOVE X", rectId+" "+rectangles.get(rectId-1).getX());
					Log.i("MOVE Y", rectId+" "+rectangles.get(rectId-1).getY());
				}
				
				break;
			case MotionEvent.ACTION_UP:
				Log.i("rectid Cancel", ""+rectId);
				if(rectId > 0){
					rectangles.get(rectId-1).setBackgroundRessource(true);
				}
				
				break;
		}

		invalidate();
		
		return true;
		
	}

	@Override
	protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
		super.onMeasure(widthMeasureSpec, heightMeasureSpec);

		width = View.MeasureSpec.getSize(widthMeasureSpec);
		height = View.MeasureSpec.getSize(heightMeasureSpec);
		
		setMeasuredDimension(width, height);
	}

}
krackmoe ist offline   Mit Zitat antworten
Alt 25.12.2011, 21:11   #4 (permalink)
Android Experte
 
Benutzerbild von DieGoldeneMitte

Registriert seit: 05.02.2010
Beiträge: 609
Abgegebene Danke: 75
Erhielt 136 Danke für 119 Beiträge
Standard AW: RelativeLayout onDraw wird nicht aufgerufen

Wo wird das Rectangle invalidiert?
__________________
Kein Support via PN/eMail. Bitte das Forum benutzen - dort haben alle etwas davon.
Bei Entwicklerfragen zu abstürzenden Apps bitte immer die Ausgabe von LogCat posten.
Tipp: Zum "Danke" sagen gibt es einen Button.
DieGoldeneMitte ist offline   Mit Zitat antworten
Alt 25.12.2011, 21:14   #5 (permalink)
Junior Mitglied

Registriert seit: 02.03.2011
Beiträge: 37
Abgegebene Danke: 0
Erhielt 1 Danke für 1 Beitrag
Standard AW: RelativeLayout onDraw wird nicht aufgerufen

Warum muss ich das rectangle invalidaten? Wenn ich nur das invalidate dann zeichnet sich doch nur der Bereich innerhalb des rectangle neu oder?
krackmoe ist offline   Mit Zitat antworten
Antwort

Stichworte
-

Themen-Optionen
Ansicht


Ähnliche Themen

Thema Autor Forum Antworten Letzter Beitrag
onListItemClick wird nicht aufgerufen Jeehaa Android App Entwicklung 2 10.12.2011 14:14
Service binden - onBind() wird nicht aufgerufen J4y Android App Entwicklung 1 17.08.2011 11:48
onConfigurationChanged wird nicht immer aufgerufen paulinchen Android App Entwicklung 1 14.04.2011 11:02
Wie RelativeLayout horiz. und vert. in RelativeLayout positionieren? Andro-medanebel Android App Entwicklung 1 11.04.2011 10:54
onCreateDialog wird nicht immer aufgerufen RED-BARON Android App Entwicklung 3 18.12.2009 10:19




Du liest gerade: "RelativeLayout onDraw wird nicht aufgerufen" unter "Android App Entwicklung" auf Android-Hilfe.de.


Powered by vBulletin®
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Search Engine Friendly URLs by vBSEO
© Android-Hilfe.de 2012 - All rights reserved.