2016-05-04 15 views
0

Zuerst erstellte ich ein Objekt namens Card, das ein Bild für Kartenspiel darstellt.
Dann habe ich eine Funktion erstellt, die einen Vektor von Karten empfängt und die Bilder auf dem Bildschirm zeichnet.onCLickListener für ImageView arbeitet langsam

Lassen Sie mich nun zwei Szenarien erklären, die passieren, einer arbeitet schnell und der andere arbeitet langsam.

Wenn ich die Karte Vektor erstellen, erstelle ich neue Karte, und fügen Sie den Vektor eins nach dem anderen wie folgt aus:

vect.add(new Card(1, '\u2660')); 
    vect.add(new Card(2, '\u2660')); 
    vect.add(new Card(3, '\u2660')); 
    vect.add(new Card(8, '\u2660')); 
    vect.add(new Card(9, '\u2660')); 
    drawCards(vect); 

Auf diese Weise alles schnell funktioniert.

Im zweiten Szenario, das ich verwenden möchte:
Ich habe eine andere Karte Vektor, der an einer anderen Stelle im Code erstellt wird. und ich sende diesen Vector an meine Funktion drawCards(). aber dann funktioniert es langsam.

drawCards(players[0].cards); 

meine drawcards Funktion:

void drawCards(Vector<Card> myCards) { 
    myCardsLayout.removeAllViews(); 
    for (Card card1 : myCards) { 
     final Card card = card1; 
     final ImageView image = new ImageView(this); 
     final String cardStr = card.cardToString(); 
     Resources res = getResources(); 
     int resID = res.getIdentifier(cardStr, "drawable", getPackageName()); 
     image.setImageResource(resID); 
     image.setLayoutParams(selfLayoutParams); 

     image.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       if (myTurn) { 
        if (currentPlayCardsVector.contains(card)) { 
         LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(image.getWidth(), image.getHeight()); 
         lp.setMargins(0, 0, 0, 0); 
         image.setLayoutParams(lp); 
         currentPlayCardsVector.remove(card); 
        } else { 
         LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(image.getWidth(), image.getHeight()); 
         lp.setMargins(0, 0, 0, 20); 
         image.setLayoutParams(lp); 
         currentPlayCardsVector.add(card); 
        } 
       } else { 
        Toast.makeText(getApplicationContext(), "Please wait for your turn", Toast.LENGTH_SHORT).show(); 
       } 
      } 
     }); 

     myCardsLayout.addView(image); 
    } 
} 

Ich möchte erwähnen, dass am Anfang die Bilder zeichnen ok ist, aber wenn das Bild geklickt wird, ist es sehr langsam zu reagieren und bewegen die Bild (im 2. Szenario).
Danke.

+0

Zeigen Sie anderen Vektor-Code, und was machst du mit diesem vecors im Code. Ich werde etwas in Draw-Methode sein, denke ich ... –

+0

Zeige zeichnen Methode pls –

+0

getan, danke – Billy

Antwort

0

Ich weiß nicht genau, wie ich diese Frage beantworten soll, aber es scheint, als ob die Ausführung Ihrer Methode 2 davon beeinflusst werden könnte, wo Sie den Code platziert haben. Code-Platzierung ist ein Schlüsselfaktor in der Entwicklung. Einmal war meine App sehr unempfänglich, und dann habe ich eine Änderung vorgenommen und dann ging es viel schneller. Sie könnten auch versuchen, Hintergrunddienste zu schließen, die nicht verwendet werden, z. B. wenn Sie sich in einer zweiten Aktivität befinden, beenden Sie Ihre erste Aktivität. Ich hoffe das hilft.

Verwandte Themen