用于ImageView的onCLickListener工作缓慢

时间:2016-05-04 21:11:14

标签: android

首先,我创建了一个名为Card的对象,它代表了纸牌游戏的图像 然后,我创建了一个接收Vector of Cards的功能,并在屏幕上绘制图像。

现在,让我解释一下正在发生的2个场景,一个工作得很快,另一个工作很慢。

1

当我创建卡片矢量时,我创建了新卡片并将其逐个添加到矢量中:

    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);  

这样,一切都很快。

2

在我要使用的第二种情况中:
我有另一个卡片矢量在代码中的另一个地方创建。我将该Vector发送到我的drawCards()函数。但它的工作进展缓慢。

    drawCards(players[0].cards);

我的drawCards功能:

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);
    }
}

我想提一下,在开头绘制图像是可以的,但是当点击图像时,响应和移动图像的速度很慢(在第二种情况下)。
感谢。

1 个答案:

答案 0 :(得分:0)

我不确定如何回答这个问题,但似乎你的方法2的性能可能会受到你放置代码的地方的影响。代码放置是开发中的关键因素。有一次,我的应用程序非常反应迟钝,然后我做了一个更改然后它运行得更快。此外,您可以尝试关闭未使用的后台服务,例如,如果您正在进行第二项活动,则完成()您的第一项活动。我希望有所帮助。