App bugged:ImageView没有出现

时间:2016-10-14 07:28:15

标签: java android xml imageview

我不明白为什么启动它时该应用程序无效。

首先,这就是我想要的:

Spaceship appears perfectly

这就是我启动游戏时出现的情况:

Spaceship disappears!

我不知道出了什么问题。我没有一个使ImageView不可见的属性......这是我的代码:

  

game_activity.xml(游戏设计)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.android.spaceinvaders.GameActivity">

    <ImageView
        android:id="@+id/fondo_juego"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="centerCrop"
        android:src="@drawable/fondo3" />

    <ImageView
        android:id="@+id/enemigo"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:layout_centerHorizontal="true"
        android:adjustViewBounds="true"
        android:src="@drawable/enemigodiseno11"/>

    <Button
        android:id="@+id/disparo"
        android:layout_width="wrap_content"
        android:layout_height="90dp"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:background="@android:color/transparent"
        android:onClick="dispara"
        android:visibility="visible" />

    <ImageView
        android:id="@+id/municion"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@id/disparo"
        android:layout_centerHorizontal="true"
        android:src="@drawable/municion"
        android:visibility="invisible" />

    <ImageView
        android:id="@+id/nave"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:adjustViewBounds="true"
        android:src="@drawable/diseno11" />

    <Button
        android:id="@+id/control_izquierda"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:background="@android:color/transparent"
        android:onClick="actualizaPosicion"
        android:visibility="visible" />

    <Button
        android:id="@+id/control_derecha"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:background="@android:color/transparent"
        android:onClick="actualizaPosicion"
        android:visibility="visible" />

</RelativeLayout>
  

activity_main.xml(这是主屏幕)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/principal_screen"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.android.spaceinvaders.MainActivity">

    <ImageView
        android:id="@+id/fondo_pantalla_principal"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="centerCrop"
        android:src="@drawable/fondo2" />

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <ImageView
            android:layout_width="150dp"
            android:layout_height="150dp"
            android:adjustViewBounds="true"
            android:src="@drawable/iconotitulo"
            android:layout_centerHorizontal="true"/>

        <ImageView
            android:layout_width="130dp"
            android:layout_height="130dp"
            android:adjustViewBounds="true"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:src="@drawable/iconotitulo1"/>

    </RelativeLayout>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:orientation="vertical">

        <ImageButton
            android:id="@+id/play_boton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@android:color/transparent"
            android:scaleType="centerCrop"
            android:onClick="iniciaJuego"
            android:src="@drawable/boton1" />

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:adjustViewBounds="true"
            android:layout_margin="10dp">

            <ImageButton
                android:id="@+id/opcion_boton"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:adjustViewBounds="true"
                android:layout_centerHorizontal="true"
                android:background="@android:color/transparent"
                android:scaleType="centerCrop"
                android:src="@drawable/boton2" />

        </RelativeLayout>

    </LinearLayout>

</RelativeLayout>
  

popup_activity.xml(一个允许用户更改某些参数的简单弹出窗口)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#839ceaac"
    android:orientation="vertical">

    <ImageButton
        android:id="@+id/volver_boton"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:layout_alignParentRight="true"
        android:layout_marginRight="2dp"
        android:layout_marginTop="3dp"
        android:background="@android:color/transparent"
        android:scaleType="centerCrop"
        android:src="@drawable/cerrar" />

    <TextView
        android:id="@+id/titulo_opciones"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="6dp"
        android:layout_marginTop="5dp"
        android:text="Opciones gráficas"
        android:textSize="20dp"
        android:textStyle="bold" />

    <View
        android:layout_width="match_parent"
        android:layout_height="2dp"
        android:layout_below="@id/titulo_opciones"
        android:background="#9dc8a6" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/titulo_opciones"
        android:layout_marginBottom="8dp"
        android:layout_marginTop="5dp"
        android:orientation="horizontal">

        <RelativeLayout
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1">

            <TextView
                android:id="@+id/fondo_titulo"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:layout_marginBottom="3dp"
                android:text="Fondo"
                android:textSize="15sp"
                android:textStyle="bold" />

            <ImageView
                android:id="@+id/fondo_1"
                android:layout_width="40dp"
                android:layout_height="60dp"
                android:layout_below="@id/fondo_titulo"
                android:layout_centerHorizontal="true"
                android:layout_marginBottom="3dp"
                android:adjustViewBounds="true"
                android:onClick="actualizaFondo"
                android:scaleType="centerCrop"
                android:src="@drawable/fondo" />

            <ImageView
                android:id="@+id/fondo_2"
                android:layout_width="40dp"
                android:layout_height="60dp"
                android:layout_below="@id/fondo_1"
                android:layout_centerHorizontal="true"
                android:layout_marginBottom="3dp"
                android:adjustViewBounds="true"
                android:onClick="actualizaFondo"
                android:scaleType="centerCrop"
                android:src="@drawable/fondo1" />

            <ImageView
                android:id="@+id/fondo_3"
                android:layout_width="40dp"
                android:layout_height="60dp"
                android:layout_below="@id/fondo_2"
                android:layout_centerHorizontal="true"
                android:layout_marginBottom="3dp"
                android:adjustViewBounds="true"
                android:onClick="actualizaFondo"
                android:scaleType="centerCrop"
                android:src="@drawable/fondo3" />

        </RelativeLayout>

        <RelativeLayout
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1">

            <TextView
                android:id="@+id/nave_titulo"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:layout_marginBottom="3dp"
                android:text="Nave"
                android:textSize="15sp"
                android:textStyle="bold" />

            <ImageView
                android:id="@+id/nave_1"
                android:layout_width="40dp"
                android:layout_height="60dp"
                android:layout_below="@id/nave_titulo"
                android:layout_centerHorizontal="true"
                android:layout_marginBottom="3dp"
                android:adjustViewBounds="true"
                android:onClick="actualizaNave"
                android:src="@drawable/diseno11" />

            <ImageView
                android:id="@+id/nave_2"
                android:layout_width="40dp"
                android:layout_height="60dp"
                android:layout_below="@id/nave_1"
                android:layout_centerHorizontal="true"
                android:layout_marginBottom="3dp"
                android:adjustViewBounds="true"
                android:onClick="actualizaNave"
                android:src="@drawable/diseno21" />

            <ImageView
                android:id="@+id/nave_3"
                android:layout_width="40dp"
                android:layout_height="60dp"
                android:layout_below="@id/nave_2"
                android:layout_centerHorizontal="true"
                android:layout_marginBottom="3dp"
                android:adjustViewBounds="true"
                android:onClick="actualizaNave"
                android:src="@drawable/diseno31" />

        </RelativeLayout>

        <RelativeLayout
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1">

            <TextView
                android:id="@+id/enemigos_titulo"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:layout_marginBottom="3dp"
                android:text="Enemigos"
                android:textSize="15sp"
                android:textStyle="bold" />

            <ImageView
                android:id="@+id/enemigo_1"
                android:layout_width="40dp"
                android:layout_height="60dp"
                android:layout_below="@id/enemigos_titulo"
                android:layout_centerHorizontal="true"
                android:layout_marginBottom="3dp"
                android:adjustViewBounds="true"
                android:onClick="actualizaEnemigo"
                android:rotation="180"
                android:src="@drawable/enemigodiseno11" />

        </RelativeLayout>

    </LinearLayout>

</RelativeLayout>
  

GameActivity.java(game_activity.xml功能)

package com.example.android.spaceinvaders;

import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class GameActivity extends AppCompatActivity {

    ImageView municion;
    ImageView nave;
    ImageView fondoJuego;
    ImageView enemigo;
    Button botonDisparo;
    Handler manejaDisparo = new Handler();
    Handler manejaEnemigo = new Handler();
    final int movimiento = 30;
    final int movimientoEnemigo = 20;
    boolean inicioAFin = false;
    int ladeadoIzq, ladeadoDer, frontal, disparo;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.game_activity);
        municion = (ImageView) findViewById(R.id.municion);
        nave = (ImageView) findViewById(R.id.nave);
        enemigo = (ImageView) findViewById(R.id.enemigo);
        fondoJuego = (ImageView) findViewById(R.id.fondo_juego);
        botonDisparo = (Button) findViewById(R.id.disparo);
        Intent i = getIntent();
        if (i != null) {
            String data = i.getStringExtra("arg");
            introduceCambios(data);
        }
        manejaEnemigo.postDelayed(accionMovimiento, 0);
    }

    private void introduceCambios(String data) {
        String[] info = data.split(" ");
        int idFondo = getResources().getIdentifier(info[0], "drawable", getPackageName());
        fondoJuego.setImageResource(idFondo);
        int idNave = getResources().getIdentifier(info[1], "drawable", getPackageName());
        cambiosMovilidad(idNave);
        nave.setImageResource(frontal);
        int idEnemigo = getResources().getIdentifier(info[2], "drawable", getPackageName());
        enemigo.setImageResource(idEnemigo);
    }

    public void actualizaPosicion(View v) {
        switch (v.getId()) {
            case (R.id.control_derecha):
                if (!seSale("der", "CU")) {
                    nave.setImageResource(ladeadoIzq);
                    nave.setX(nave.getX() - movimiento);
                }
                break;
            case R.id.control_izquierda:
                if (!seSale("izq", "CU")) {
                    nave.setImageResource(ladeadoDer);
                    nave.setX(nave.getX() + movimiento);
                }
                break;
        }
    }

    private void cambiosMovilidad(int idNave) {
        switch (idNave) {
            case 2130837589:
                frontal = R.drawable.diseno11;
                ladeadoDer = R.drawable.diseno13;
                ladeadoIzq = R.drawable.diseno12;
                disparo = R.drawable.municion;
                break;
            case 2130837592:
                frontal = R.drawable.diseno21;
                ladeadoDer = R.drawable.diseno23;
                ladeadoIzq = R.drawable.diseno22;
                disparo = R.drawable.municion1;
                break;
            case 2130837595:
                frontal = R.drawable.diseno31;
                ladeadoDer = R.drawable.diseno33;
                ladeadoIzq = R.drawable.diseno32;
                break;
        }
    }

    public void dispara(View v) {
        nave.setImageResource(frontal);
        municion.setImageResource(disparo);
        municion.setX(nave.getX() + (((nave.getWidth()) / 2) - 5));
        municion.setY(nave.getY());
        municion.setVisibility(View.VISIBLE);
        botonDisparo.setEnabled(false);
        manejaDisparo.postDelayed(accionDisparo, 0);
    }

    Runnable accionDisparo = new Runnable() {
        @Override
        public void run() {
            municion.setY(municion.getY() - 50);
            if (llegaAlFinal()) {
                municion.setVisibility(View.INVISIBLE);
                manejaDisparo.removeCallbacks(accionDisparo);
                botonDisparo.setEnabled(true);
            }
            manejaDisparo.postDelayed(this, 80);
        }
    };

    Runnable accionMovimiento = new Runnable() {
        @Override
        public void run() {
            if (inicioAFin) {
                enemigo.setImageResource(R.drawable.enemigodiseno12);
                enemigo.setX(enemigo.getX() + movimientoEnemigo);
            } else {
                enemigo.setImageResource(R.drawable.enemigodiseno13);
                enemigo.setX(enemigo.getX() - movimientoEnemigo);
            }
            if (seSale("izq", "IA") || seSale("der", "IA"))
                inicioAFin = !inicioAFin;
            manejaEnemigo.postDelayed(this, 80);
        }
    };

    private boolean llegaAlFinal() {
        return municion.getY() <= 20;
    }

    private boolean seSale(String direccion, String jugador) {
        switch (direccion) {
            case "izq":
                switch (jugador) {
                    case "CU":
                        return (nave.getX() + movimiento + nave.getWidth()) > findViewById(R.id.activity_main).getWidth();
                    case "IA":
                        return (enemigo.getX() + movimiento + enemigo.getWidth()) > findViewById(R.id.activity_main).getWidth();
                }
            case "der":
                switch (jugador) {
                    case "CU":
                        return (nave.getX() - movimiento) < 0;
                    case "IA":
                        return (enemigo.getX() - movimiento) < 0;
                }
        }
        return true;
    }
}
  

MainActivity.java(activity_main.xml和popup_activity.xml功能)

package com.example.android.spaceinvaders;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageButton;
import android.widget.PopupWindow;
import android.widget.RelativeLayout;

public class MainActivity extends AppCompatActivity {

    ImageButton opcionBoton;
    private PopupWindow popup;
    private RelativeLayout layoutPrincipal;
    String[] resultados;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        resultados = new String[3];
        resultados[0] = "fondo3";
        resultados[1] = "diseno11";
        resultados[2] = "enemigodiseno11";
        opcionBoton = (ImageButton) findViewById(R.id.opcion_boton);
        layoutPrincipal = (RelativeLayout) findViewById(R.id.principal_screen);
        opcionBoton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                LayoutInflater inflater = (LayoutInflater) getBaseContext().getSystemService(LAYOUT_INFLATER_SERVICE);
                View vistaPopup = inflater.inflate(R.layout.popup_activity, null);
                popup = new PopupWindow(
                        vistaPopup,
                        RelativeLayout.LayoutParams.MATCH_PARENT,
                        RelativeLayout.LayoutParams.WRAP_CONTENT
                );
                ImageButton cerrarPop = (ImageButton) vistaPopup.findViewById(R.id.volver_boton);
                cerrarPop.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        popup.dismiss();
                        opcionBoton.setVisibility(View.VISIBLE);
                    }
                });
                popup.showAtLocation(layoutPrincipal, Gravity.BOTTOM, 0, 0);
                opcionBoton.setVisibility(View.INVISIBLE);
            }
        });
    }

    public void iniciaJuego(View view) {
        Intent juego = new Intent(view.getContext(), GameActivity.class);
        juego.putExtra("arg", resultados[0] + " " + resultados[1] + " " + resultados[2]);
        startActivity(juego);
    }

    public void actualizaFondo(View vista) {
        switch (vista.getId()) {
            case R.id.fondo_1:
                resultados[0] = "fondo";
                break;
            case R.id.fondo_2:
                resultados[0] = "fondo1";
                break;
            case R.id.fondo_3:
                resultados[0] = "fondo3";
                break;
        }
    }

    public void actualizaNave(View vista) {
        switch (vista.getId()) {
            case R.id.nave_1:
                resultados[1] = "diseno11";
                break;
            case R.id.nave_2:
                resultados[1] = "diseno21";
                break;
            case R.id.nave_3:
                resultados[1] = "diseno31";
                break;
        }
    }

    public void actualizaEnemigo(View vista) {
        switch (vista.getId()) {
            case R.id.enemigo_1:
                resultados[2] = "enemigodiseno11";
                break;
        }
    }

}

我希望你能帮助我,拜托......我不知道错误在哪里。

项目存储库是:github.com/cvazquezlos/Space-Invaders-Android

非常感谢你!

0 个答案:

没有答案