私は、カードをクリックして別のカードにランダムに変更するゲームを作っています。 1枚のカードの画像ファイルは370x512 pngで、そのサイズは200 kbです。私の問題は、imageViewがあるカードから別のカードに画像を変更するプロセスが非常に遅く、2秒間続きます。他の問題は、カードをあまりにも速くクリックするとクラスがクラッシュすることです。私はボタンとImageViewでImageButtonを試してみました。11のImageView(ゲームには11種類のカードがあります)を試しましたが、その中には常に1つしか表示されていません。私は、カードを交換するプロセスに時間がかかりすぎる理由を知りません。カードを変更するコードはここにあります。このコードにはボタンと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();
}
}
ありがとうございました!
再帰の問題、つまり 'selectCard()'の中から 'selectCard()'を呼び出していると思われます。これは別の方法で構造化する必要があります。 – ShadowGod