2016-07-07 7 views
2

tun Ich weiß, dass ich viel in meinem Hauptthread los muss, aber ich bin auf der Suche nach einem Workaround.Android - Anwendung kann zu viel Arbeit auf seinem Hauptthread

Hier Struktur meiner App:

Derzeit meine Haupttätigkeit Ich habe, die 6 klickbare imageviews hat (die offenen neuen Aktivitäten), das Problem tritt auf, wenn eine der Aktivitäten geöffnet werden. In dieser Aktivität verwende ich ein SlidingTabLayout mit 3 Tabs.

Das ist, was ich zu erreichen versuchen:

Ich bin ein Klavier aus Drawables (Formen)

Zum Beispiel erstellen, ist dies die schwarze Taste:

<shape 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
<stroke 
    android:width="1dp" 
    android:color="#FF000000" /> 

    <solid 
     android:color="#FF000000"/> 
</shape> 

Dann Ich nenne dieses Zeichen in meinem Layout, um das Klavier zu erstellen:

<ImageView 
    android:layout_width="8dp" 
    android:layout_height="37dp" 
    android:layout_marginLeft="40dp" 
    android:layout_marginStart="10.5dp" 
    android:src="@drawable/key_black" /> 

Ich zeige 7 Imagevi Ews für die schwarzen Tasten und 10 Bildansichten für die weißen Tasten PER Piano und ich habe 11 Klaviere PER Tab. Das sind also 187 Image View pro Tab.

Also ich verstehe, dass dies auf meiner CPU hart sein wird. Ich suche nach einer Möglichkeit, dies von meinem Hauptthema zu tun? Um es im Hintergrund zu tun? Um es zu tun, ohne Verzögerung zu erleben?

+0

Können Sie ein Bild von dem, was es aussehen soll, und erklären, was Sie erreichen wollen/was es tun soll? Anscheinend möchten Sie den Benutzer mit den Tasten des Klaviers interagieren? Aber 187 wechselbare Gegenstände scheinen ein wenig zu viel auf einem Bildschirm zu haben. – AljoSt

+0

Ich möchte nur das Klavier anzeigen, ich möchte nicht, dass der Benutzer damit interagiert. –

+0

Mögliches Duplikat von [Die Anwendung verarbeitet möglicherweise zu viel Arbeit an ihrem Hauptthread] (http://stackoverflow.com/questions/14678593/the-application-may-be-doing-too-much-work-on-it -main-thread) –

Antwort

0

Also wie oben erwähnt, würde ich ein Basisbild für das Klavier erstellen und es entsprechend den aktuell gedrückten Tasten einstellen. Der folgende Code zeigt die allgemeine Idee: Laden Sie das Basisbild von R.drawable, verwenden Sie die Indizes für die gedrückten Tasten sowie die Größe des zu erstellenden Bildes Paths, zeichnen Sie die Pfade, geben Sie das Bild zurück. Wenn Sie eine Klärung benötigen, lassen Sie es mich wissen.

public Bitmap getPianoImage(Context context, int[] pressedKeyIndices){ 
    Bitmap pianoImage = BitmapFactory.decodeResource(context.getResources(), R.drawable.pianoBase); 
    Canvas canvas = new Canvas(pianoImage); 
    Paint paint = new Paint(); 
    paint.setColor(Color.RED); 
    paint.setStyle(Paint.Style.FILL); 

    for(int pressedKeyIndex : pressedKeyIndices){ 
     Path path = getPathForKeyIndex(pressedKeyIndex, pianoImage.getWidth(), pianoImage.getHeight()); 
     canvas.drawPath(path, paint); 
    } 

    return pianoImage; 
} 

private Path getPathForKeyIndex(int idx, int w, int h){ 

    Path path = new Path(); 

    switch(idx){ 
     case 0: 
      path.moveTo(0f*w, 0f*h); // used for first point 
      path.lineTo(0f*w, 1f*h); 
      path.lineTo(0.1f*w, 1f*h); 
      path.lineTo(0.1f*w, 0.5f*h); 
      path.lineTo(0.08f*w, 0.5f*h); 
      path.lineTo(0.08f*w, 0f*h); 
      path.lineTo(0f*w, 0f*h); 
      break; 
     case 1: ... 
    } 

    return path; 
} 
+0

Könntest du bitte klarstellen, was ich in meinem XML machen soll? –

+0

Sie benötigen keine XML-Datei. Lege das Basisbild des Klaviers (nur schwarz und weiß) in den Ordner "R.drawable" (-> '.drawable.pianoBase'). Verwenden Sie dann den obigen Code (der ausgefüllt werden muss), um eine Bitmap zu erstellen. Die Bitmap nimmt das Basisbild und färbt die Bereiche, die Ne-Inzidenzen entsprechen, die Sie als Argument der Funktion übergeben. – AljoSt

+0

Ich habe das Bild in R.drawable platziert und ich habe Ihren Code eingefügt, aber nichts passiert, kann das Bild nicht sehen ..Ich verstehe, was Sie sagen, aber ich kann das Bild nicht sehen –

Verwandte Themen