在我的Android应用程序中切换图片需要太长时间

时间:2016-09-12 02:58:35

标签: java android

我正在制作一款游戏,您可以在其中点击一张卡片将其随机更改为另一张卡片。一张卡的图像文件是370x512 png,大小或多或少200 kb。我的问题是imageView将其图片从一张卡片更改为另一张卡片的过程非常缓慢,持续时间近两秒钟。另一个问题是如果你在卡片上点击太快,那么课程会崩溃。我已经尝试过使用ImageButton,带有一个按钮和一个ImageView,我尝试了11个ImageViews(游戏中有11个不同的卡),他们总是在那里,但只有一个是可见的。我没有任何线索为什么换卡过程需要这么多时间。这是我更改卡的代码。此代码带有一个按钮和一个ImageView:

public class MainActivity extends Activity {

public static String dampfhammerData = "dampfhammerData";
SharedPreferences DampfhammerData;

public int nextCard;
public int lastCard = 0;

public int all=3;
public int buddy=3;
public int dampfhammer=3;
public int frauen=3;
public int links=3;
public int rechts=3;
public int maenner=3;
public int questionmaster=3;
public int regel=3;
public int themenrunde=3;
public int zaehlen=3;
public int deck = 44;

public String version;

ImageView Karte;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

}

public void changeCard(View view) {
    selectCard();
}

public void selectCard(){
    lastCard = nextCard;
    if(deck > 0) {
        Random rand = new Random();
        nextCard = (rand.nextInt(10));
        if(nextCard != lastCard) {
            checkCardDeck();
        }else {
            selectCard();
        }
    }else {
        Intent intent = new Intent(this, End.class);
        startActivity(intent);
    }
}

public void checkCardDeck(){
    Karte = (ImageView) findViewById(R.id.karte);

    switch (nextCard) {
        case 0:
             if(all > 0){
                 all--;
                 deck--;
                 Karte.setBackgroundResource(R.drawable.all);
             }else {
                 selectCard();
             }
            break;
        case 1:
            if(zaehlen > 0){
                zaehlen--;
                deck--;
                Karte.setBackgroundResource(R.drawable.zaehlen);
            }else {
                selectCard();
            }
            break;
        case 2:
            if(buddy > 0){
                buddy--;
                deck--;
                Karte.setBackgroundResource(R.drawable.buddie);
            }else {
                selectCard();
            }
            break;
        case 3:
            if(themenrunde > 0){
                themenrunde--;
                deck--;
                Karte.setBackgroundResource(R.drawable.themenrunde);
            }else {
                selectCard();
            }
            break;
        case 4:
            if(dampfhammer > 0){
                dampfhammer--;
                deck--;
                Karte.setBackgroundResource(R.drawable.dampfhammer);
            }else {
                selectCard();
            }
            break;
        case 5:
            if(links > 0){
                links--;
                deck--;
                Karte.setBackgroundResource(R.drawable.links);
            }else {
                selectCard();
            }
            break;
        case 6:
            if(rechts > 0){
                rechts--;
                deck--;
                Karte.setBackgroundResource(R.drawable.rechts);
            }else {
                selectCard();
            }
            break;
        case 7:
            if(frauen > 0){
                frauen--;
                deck--;
                Karte.setBackgroundResource(R.drawable.frauen);
            }else {
                selectCard();
            }
            break;
        case 8:
            if(maenner > 0){
                maenner--;
                deck--;
                Karte.setBackgroundResource(R.drawable.maenner);
            }else {
                selectCard();
            }
            break;
        case 9:
            if(questionmaster > 0){
                questionmaster--;
                deck--;
                Karte.setBackgroundResource(R.drawable.questionmaster);
            }else {
                selectCard();
            }
            break;
        case 10:
            if(regel > 0){
                regel--;
                deck--;
                Karte.setBackgroundResource(R.drawable.regel);
            }else {
                selectCard();
            }
            break;
    }
}

@Override
public void onBackPressed() {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("Wollen sie das Spiel verlassen?") //
            .setMessage("Das aktuelle Spiel wird abgebrochen und sie kehren zum Startbildschirm zurück, wollen sie das wirklich?") //
            .setPositiveButton(("Ja"), new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    finish();
                }
            })
            .setNegativeButton(("Nein"), new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {

                    dialog.dismiss();
                }
            });
    builder.show();
}
}

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

如果你的牌组由11张牌组成,每张牌出现四次(我认为这是基于查看代码的权利),你可以创建一个随机的随机播放:

ArrayList<Integer> deckList = new ArrayList<Integer>();
for (int i=0; i<11; i++) {
  deckList.add(i); deckList.add(i); deckList.add(i); deckList.add(i);
}
Collections.shuffle(deckList);

通过选择一个随机的下一张卡并在重复时重试,你正在使用一个非常低效且不可预测的过程,特别是因为重试是递归的,增加了调用堆栈的大小。

您当然必须进行其他更改才能在代码中使用我的套牌,但它应该更快一些。