Display auflösung auslesen und rectangle erstellen

  • Antworten:7
Volkan Aydin
  • Forum-Beiträge: 187

09.12.2014, 21:56:52 via Website

Es sollte ja ein einfachs Problem sein, ich möchte die Display breite auslesen:

WindowManager wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE);
//       Display display = wm.getDefaultDisplay();
//          Point size = new Point();
//          display.getSize(size);
//          int width = size.x;
//          int height = size.y;                
//          DisplayMetrics outMetrics = new DisplayMetrics ();
//          display.getMetrics(outMetrics);
//
//          float density  = ctx.getResources().getDisplayMetrics().density;
//          float dpHeight = outMetrics.heightPixels / density;
//          float dpWidth  = outMetrics.widthPixels / density;
          DisplayMetrics d = new DisplayMetrics();
            wm.getDefaultDisplay().getMetrics(d);
            int width  = d.widthPixels;
            int height = d.heightPixels;

Ihr seht, ich habe bereits drei varianten hinter mir....

um danach mit Canvas........

private LinearLayout setCanvas(LinearLayout ll,int left, int top, int right, int bottom,int dicke){

        int bitmapWidth = left + 25;
            bitmapWidth = bitmapWidth + right;
            bitmapWidth = bitmapWidth + 25;
        int bitmapHeight = top + 25;
            bitmapHeight = bitmapHeight + bottom;
            bitmapHeight = bitmapHeight + 25;

        Bitmap bg = Bitmap.createBitmap(bitmapWidth,bitmapHeight , Bitmap.Config.ARGB_8888);

        Paint glasR = new Paint(); glasR.setColor(Color.parseColor("#000000"));
        Paint glasF = new Paint(); glasF.setColor(Color.parseColor("#FFFFFF"));

        Canvas canvasF = new Canvas(bg); //fläche   
        Canvas canvasR = new Canvas(bg); //rand

        canvasR.drawRect(left, top, right, bottom, glasR);

        int fLeft = left+dicke;
        int fTop  = top +dicke;
        int fRight = right-dicke;
            fRight = fRight-dicke;
        int fBottom = bottom-dicke;
            fBottom = fBottom-dicke;

        canvasF.drawRect(fLeft, fTop, fRight, fBottom, glasF);


        ll.setBackgroundDrawable(new BitmapDrawable(bg));

        return ll;
    }

eigentlich möchte ich, das das rechteck einfach 100 pixel schmaler ist.

Beim Emulator und meinem altem Handy jedenfalls kommt das rechteck nicht über die hälfte der Bildschirmbreite?

Wos isch do los?

Antworten
Georg C.
  • Forum-Beiträge: 235

09.12.2014, 23:51:47 via Website

Solange Du den Layout als deine "Canvas" benutzt kommst Du aus dem "Teufelkreis / Problem" nicht mehr raus! Benutze einfach ein View Objekt. Gucke Dir paar Tuts an; analysiere die (damit du es verstehst) und "die Welt wird wieder in Ordnung sein".

Aber was anderes:

public AlphaAnimation BoxAnimation(Float startValue,Float EndValue, int StartTime, int EndTime) {
...
        return alpha;
}

oder

private LinearLayout setCanvas(LinearLayout ll,int left, int top, int right, int bottom,int dicke){
...
return ll;
}

Weil am Ende ein Return stehet, sind es Methoden (vermute ich) - ok!
Bekommst Du da keinen Syntax- Fehler?

public AlphaAnimation BoxAnimation( ... <---------- ????
oder
private LinearLayout setCanvas( ... <---------- ????

Sorry für Gramatik & Stilistik Fehler.

Antworten
Volkan Aydin
  • Forum-Beiträge: 187

10.12.2014, 07:34:26 via Website

Also bisher hatte ich keine problem damit, meine logikvdahinter ist die, das ich diese Methode einfach überall einfach reinschleife.

Wieso sollte das Probleme geben und inwiefern soll ein View dies ändern??? Ich meine Pixel bleibt pixel? Ich dachte das Problem liegt darin das canvas mit anderen einheten arbeitet

Antworten
Georg C.
  • Forum-Beiträge: 235

10.12.2014, 21:57:31 via Website

Machen wir kurz.
Spätestens jetzt, soll dir klar sein, dass dein Zeichen auf einem Layout - NIX! ist und NIX! wird. Weil:
Die Layout Klassen dienen zur Anordnung von Steuerelementen .... besitzen seine Methoden ... kümmern sich um die Positionierung / Ausrichtung .... FERTIG!

Was ich für dich machen kann ist:

Bitte lesen1
Bitte lesen2

Was der Sven R. dir damals mit "Callbacks und Funktionen eines Canvas" auch sagen wollte ist das SurfaceHolder.Callback. Es ist am Anfang etwas verwirrend, versuche es einfacher mit einem View.

Sorry für Gramatik & Stilistik Fehler.

Antworten
Volkan Aydin
  • Forum-Beiträge: 187

10.12.2014, 22:17:23 via Website

ououou! ich frage doch nur, atme mal durch. Ich habe nicht den ganzen tag zeit am Computer herumzuspielen, geschweige den irgendwelche Kurse zu belegen, ich habe immer noch eine Familie zu ernähren!

Sollten Fragen hier unerwünscht sein, hoffe ich das ich ein anderes Forum finde, vielleicht könnt ihr mir ja sogar eins empfehlen, ihr wart halt gerade einfach das erst beste was ich auf deutsch gefunden habe.

Das mit View hat funktioniert, ich nehme schwer an das diese Linearlayout zu anordnungszwecke verwendet wird, und wenn ich wissen will weshalb Pixel angaben dort nicht funktionieren, erwarte ich einfach eine Antwort. Basta....

Werde die links mir morgen reinziehen, bin vor 2 Stunden nach hause gekommen von der arbeit und muss morgen um 6 wieder auf.

Von NIX kommt NIX! Immerhin habe ich meine App schon an 3 Händler verkauft, zugegeben, ich kenne diese Drei, diese sind jedenfalls begeistert und verwenden es aus freien stücken, der eine sogar schon täglich!

Also fahr mir nicht an den Karren! Ich kann auch ganz anders antworten, und das nicht nur hinter einem PC versteckt!

Antworten
Andy N.
  • Forum-Beiträge: 22.375

10.12.2014, 22:46:00 via Website

Hallo und guten Abend,

von nix kommt nix, das ist richtig. Das gilt aber auch für das Miteinander hier. Daher bleibt bitte friedlich und sachlich. Danke (smug)

Viele Grüße,
Andy


OnePlus 3 (Resurrection Remix 5.8.2)
LG G Watch

Regeln | unsere Mods & Admins

pepperonas

Antworten
Georg C.
  • Forum-Beiträge: 235

10.12.2014, 23:31:24 via Website

Nur am Rande.
Ich bin in verschiedenen (.....) Foren seid ca. 10 Jahren tätig.
So eine Antwort habe ich noch nie Bekommen. Traurig - ... aber Danke.
Kopfschütteln.

Ps.
Kostenlose Hilfe zu bekommen ist immer noch ein Privileg!

— geändert am 10.12.2014, 23:33:02

Sorry für Gramatik & Stilistik Fehler.

Antworten
pepperonas
  • Forum-Beiträge: 434

11.12.2014, 09:22:14 via Website

Georg C.

Machen wir kurz.
Spätestens jetzt, soll dir klar sein, dass dein Zeichen auf einem Layout - NIX! ist und NIX! wird. Weil:
Die Layout Klassen dienen zur Anordnung von Steuerelementen .... besitzen seine Methoden ... kümmern sich um die Positionierung / Ausrichtung .... FERTIG!

Nope, das stimmt nicht. Es lässt sich ein Layout-Objekt (zB ein FrameLayout mit einem grünen Hintergrund) über den Bildschirm verschieben... Das kommt dem Canvas dann auch schon ziemlich nahe..
Andersherum kann man auch den Canvas benutzen um eine UI darzustellen.
Gehuppt wie geduppt, deine Aussage ist so nicht richtig und hilfreich ist sie dementsprechend auch nicht, das nur am Rande.
Aber gleichzeitig betonte ich, dass ich dich nicht angreifen möchte - immerhin hast du ja versucht zu helfen und du hast vollkommen Recht - es ist nicht selbstverständlich dass einem geholfen wird.

Nun zurück zum Thema..

private int getScreenWidth() {
    Display display = mWindowManager.getDefaultDisplay();
    Point point = new Point();
    display.getSize(point);
    int width = point.x;
    return width;
}


private int getScreenHeight() {
    Display display = mWindowManager.getDefaultDisplay();
    Point point = new Point();
    display.getSize(point);
    int height = point.y;
    return height;
}

(die Methoden lass sich weiter verkürzen)

Open Source

Antworten