Frage

Ich Spiele mit dem alternativen auf, wie zu navigieren ein "unendliches", scale-like, - Steuerung in android.Die einfache Idee ist neu, die gesamte Ansicht auf jedem Bildlauf-Bewegung, aber irgendwie ist es scheint nicht der richtige Weg.Es ist möglich, ziehen Sie den Inhalt vor der hand, aber ich habe keine Ahnung, wie weit soll ich die Ansicht in die erste Ort, und was passiert, wenn der Benutzer scrollt zu Ende die Aussicht?Ich glaube, ich muss zu verlängern die Ansicht in diese Richtung.

Sollte ich gehen in Richtung programmgesteuert hinzufügen (und entfernen) chunks Ansicht auf ein lineares layout?Es wäre toll zu hören, welche Erfahrungen sind da draußen in Bezug auf Zeichnung dieser Art von lange-scrolling-custom control.

Vielen Dank /Erik

War es hilfreich?

Lösung

Wenn Sie mit der Liste / Gitter oder etwas arbeiten, die Adapter für Daten verwendet, können Sie eine trefflichsten Klasse von CommonsWare und verfügbar hier geschrieben verwenden:

http://github.com/commonsguy/cwac-endless

wurde es speziell für diesen Zweck

Andere Tipps

verwenden Sie eine offscreen-buffer die Größe des Steuerelements.

zuerst machen Sie es einfach Weg.Zeichnen Sie die gesamte offscreenbuffer gescrollt, um die richtige position.Wenn Sie bereit sind blit-es an den eigentlichen Bildschirm.

Wenn dies zu langsam ist, versuchen Sie es optimieren, indem Sie nicht Neuzeichnen des gesamten offscreenbuffer aber durch eine vertikale split:(Ich bin nur im Gespräch über einen horizontalen Bildlauf-Bewegung, die hier nun um das Konzept leichter zu erfassen.Aber diese Methode gilt für 8-Wege-scrolling-als auch)

dies ist etwas schwierig zu implementieren (das ist, warum ich schlug vor, den einfachen Ansatz, der ersten), aber versuchen Sie, stellen Sie sich ein Papier mit Foto auf es, und der linken Seite, wickeln Sie sich um und kleben Sie es an der rechten Seite (also Sie bekommen einen Schlauch).Auf diese Weise können Sie Blättern, das Papier auf unbestimmte Zeit (durch drehen der Röhre um es y-Achse).

in ähnlicher Weise können Sie das gleiche tun mit der offscreen-buffer.Bereiten Sie den offscreen-Puffer durch die Zeichnung der komplette Inhalt auf es.

jetzt scrollen Sie rechts im Grunde teilen Sie die offscreen-Puffer 2 (durch diese vertikale split (genauso wie das Papier in dem Beispiel, in dem der Klebstoff wurde)).angenommen, Sie Blättern Sie um 10 Pixel nach rechts, was Sie tun, ist:

  • kopieren der rechten Seite der split (befindet sich auf pixel-10) - pixel-0 Ihre Kontrolle.(so ist die ganze region aus (10, 0) - (Breite - Höhe) zu:(0,0)
  • kopieren Sie dann die linke Seite des split:pixel 0 bis 10 pixel Breite-10.also:(0,0)-(10,height) to (width-10, 0)

bevor Sie dies tun, NUR neu zeichnen die Pixel wurden verändert werden (in diesem Fall 10 Pixel, da wir gescrollt 10 Pixel).Alle anderen Pixel sind immer noch identisch und müssen nicht neu zeichnen.

Sie müssen zeichnen Sie diese auf ein Papier selbst wirklich verstehen.Es ist eine ziemlich verbreitete Technik, mit Spiel-Entwicklung auf Plattformen, wo die Ressourcen begrenzt sind (Mobiltelefone etc.).

p.en.scrollen in alle Richtungen erreicht werden kann in die genaue gleichen Weise (obwohl es noch härter, rechts) ;^)

ein bisschen spät zur Party, aber ich dachte, ich Ihnen eine viel einfachere Art und Weise zeigen würde zu gehen: Sie müssen nur die Bildschirmgröße oder die Größe der Ansicht in Ihrem Hintergrund ist, und dann den folgenden Code aufrufen (vorausgesetzt, Sie eine Ansicht und zwingende OnDraw sind erstreckt):

 private void drawEndlessBackground(Canvas canvas, float left, float top) {

    float modLeft = left % screenWidth;

    canvas.drawBitmap(backgroundImage, modLeft, top, null);

    if (left < 0) {

        canvas.drawBitmap(backgroundImage, modLeft + screenWidth, top, null);

    } else {

        canvas.drawBitmap(backgroundImage, modLeft - screenWidth, top, null);

    }



}

, wie etwa in XML? private void drawEndlessBackground (Canvas Leinwand, float links, float oben) {

float modLeft = left % screenWidth;

canvas.drawBitmap(backgroundImage, modLeft, top, null);

if (left < 0) {

    canvas.drawBitmap(backgroundImage, modLeft + screenWidth, top, null);

} else {

    canvas.drawBitmap(backgroundImage, modLeft - screenWidth, top, null);

}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top