Problem mit Density

  • 3 Antworten
  • Letztes Antwortdatum
D

didisoft

Neues Mitglied
0
Hallo liebe Community!

Ich habe ein kleines großes Problem mit einer kleinen Test-App:
Die Density!! :love:
Also, auf dem Emulator sieht alles soweit ganz nett aus, allerdings, auf meinem 5" Handy, das glatte Gegenteil.

Die Hälfte passt nicht auf den Bildschirm :scared:

Naja, also hier mal der Code, es ist ein kleines "Paint" :thumbup:

Code:
package com.example.test;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.Toast;

public class ViewClass extends View implements OnTouchListener {
	Bitmap bitmap;
	Canvas bitmapCanvas;

	int size = 6;

	boolean redEnabled, yellowEnabled, whiteEnabled;

	boolean isInitialized;
	Paint paint = new Paint();
	Paint circlePaint = new Paint();

	public ViewClass(Context context) {
		super(context);
		setFocusable(true);
		setFocusableInTouchMode(true);
		this.setOnTouchListener(this);
		paint.setColor(Color.WHITE);
		paint.setAntiAlias(true);
		paint.setStyle(Style.FILL_AND_STROKE);

		circlePaint.setAntiAlias(true);
		circlePaint.setStyle(Style.FILL_AND_STROKE);

		redEnabled = false;
		yellowEnabled = false;
		whiteEnabled = false;
		
		isInitialized = false;
	}

	private void init() {
		bitmap = Bitmap.createBitmap(getWidth(), getHeight(),
				Bitmap.Config.RGB_565);

		bitmapCanvas = new Canvas();
		bitmapCanvas.setBitmap(bitmap);
		bitmapCanvas.drawColor(Color.BLACK);

		circlePaint.setColor(Color.RED);
		bitmapCanvas.drawCircle(70f, 45f, 40f, circlePaint);

		circlePaint.setColor(Color.YELLOW);
		bitmapCanvas.drawCircle(170f, 45f, 40f, circlePaint);

		circlePaint.setColor(Color.WHITE);
		bitmapCanvas.drawCircle(270f, 45f, 40f, circlePaint);

		circlePaint.setColor(Color.BLUE);
		circlePaint.setTextSize(40f);
		bitmapCanvas.drawText("By ********", 350f, 60f, circlePaint);

		circlePaint.setColor(Color.GRAY);
		bitmapCanvas.drawCircle(580, 50, 3, circlePaint);
		bitmapCanvas.drawCircle(614, 50, 6, circlePaint);
		bitmapCanvas.drawCircle(652, 50, 9, circlePaint);
		bitmapCanvas.drawCircle(695, 50, 12, circlePaint);
		
//		bitmapCanvas.drawText(String.valueOf(dens), 300, 500, circlePaint);
		
		isInitialized = true;
	}

	@Override
	public void onDraw(Canvas canvas) {
		if (!isInitialized)
			init();

		canvas.drawBitmap(bitmap, 0, 0, paint);
	}

	@Override
	public boolean onTouch(View view, MotionEvent event) {

		if (event.getY() > 100) {

			bitmapCanvas.drawCircle(event.getX(), event.getY(), size, paint);

			invalidate();
		}

		else {
			if (event.getX() > 30 && event.getX() < 110)
				setPaintColor(cls.r);

			if (event.getX() > 130 && event.getX() < 210)
				setPaintColor(cls.y);

			if (event.getX() > 230 && event.getX() < 310)
				setPaintColor(cls.w);

			
			
			if (event.getX() > 560 && event.getX() < 600)
				size = 3;

			if (event.getX() > 598 && event.getX() < 630)
				size = 6;

			if (event.getX() > 635 && event.getX() < 675)
				size = 9;
				
			if (event.getX() > 680 && event.getX() < 710)
				  size = 12;
			
			
			
			if (event.getX() > 350 && event.getX() < 535)
				Toast.makeText(getContext(), "This app was made by ***** ********.",
						Toast.LENGTH_SHORT).show();
		}

		return true;
	}

	public void setPaintColor(cls color) {
		if (color == cls.r) {
			redEnabled = true;
			yellowEnabled = false;
			whiteEnabled = false;

			paint.setColor(Color.RED);
		} else if (color == cls.w) {
			redEnabled = false;
			yellowEnabled = false;
			whiteEnabled = true;

			paint.setColor(Color.WHITE);
		} else if (color == cls.y) {
			redEnabled = false;
			yellowEnabled = true;
			whiteEnabled = false;

			paint.setColor(Color.YELLOW);
		}
	}
	
	public int dp(int dpInput) {
		  final float scale = getResources().getDisplayMetrics().density;
		  return (int) (dpInput * scale + 0.5f);
		} 

}

Also das ist meine View-Klasse, meine Activity-Klasse sollte dabei eher uninteressant sein, da ich dort nur setContentView() nutze :biggrin:

Wie ihr seht habe ich es mit einer Methode dp(...) versucht, also jede Zahl mit density multipliziert und dann aufgerundet. Das habe ich allerdings rückgängig gemacht, weil es nicht ging!!!

Also, wie nutze ich diese miese Density?!?! :scared:
Und dann noch was zu diesem kleinen test: Wenn man den Finger schneller über den Bildschirm bewegt, zeichnet er mir lauter kleine Kreise, die man aber nicht als Linie erkennt. Wie kann ich das besser umsetzen, außer jedes Mal einen Kreis zu zeichnen? Das sieht dann nämlich nicht wie ein Strich aus, sondern wie viele kleine Punkte o.O

Vielen Dank für eure Tipps!

LG, David. :D
 
A

Anzeige

  • Gerade eben
  • Neu
Vielen Dank, diese Seiten habe ich mir bereits alle durchgelesen, allerdings gehen sie nur auf xml-layouts ein. Ich nutze hier aber pixel, also nicht XML.
Es heißt ja, dass man "Pixel mal Density" rechnet, allerdings klappt das nicht wie gewünscht.
Naja, kann auch sein, dass ich da was falsch verstehe, also korrigiert mich bitte :D

Bin für weitere Antworten offen ;)
 
Du hast doch schon die Methode dp()
Was hat denn damit nicht funktioniert?
 
Zurück
Oben Unten