D
didisoft
Neues Mitglied
- 0
Hallo liebe Community!
Ich habe ein kleines großes Problem mit einer kleinen Test-App:
Die Density!!
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
Naja, also hier mal der Code, es ist ein kleines "Paint"
Also das ist meine View-Klasse, meine Activity-Klasse sollte dabei eher uninteressant sein, da ich dort nur setContentView() nutze
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?!?!
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.
Ich habe ein kleines großes Problem mit einer kleinen Test-App:
Die Density!!

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

Naja, also hier mal der Code, es ist ein kleines "Paint"
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
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?!?!

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.