2015-07-27 1 views
0

salut je suis nouveau chez android et je veux créer une image qui se déplacera à travers l'écran, mais chaque fois que je crée une vue de costume et dessinez dessus le l'application continue à me ramener à mon écran principal.Je ne peux pas dessiner sur une toile il me garde mon écran principal

ici est mon écran principal nommé MainActivity.java

package com.example.prototype2; 

import android.support.v7.app.ActionBarActivity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.ImageButton; 
import android.widget.ImageView; 

public class MainActivity extends ActionBarActivity { 

ImageButton start; 
ImageView quit; 


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

    start = (ImageButton) findViewById(R.id.start_btn); 
    quit = (ImageView) findViewById(R.id.quit_btn); 

    start.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Intent myIntent = new Intent(MainActivity.this, Map.class); 
      startActivity(myIntent); 

     } 
    }); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 
    if (id == R.id.action_settings) { 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 
} 

c'est ma classe de carte qui sera dirigé vers le jeu nommé Map.calss

package com.example.prototype2; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 

public class Map extends Activity{ 

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

    game1 = (Button) findViewById(R.id.btn_game1); 

    game1.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Intent myIntent = new Intent(Map.this, patintero.class); 
      startActivity(myIntent); 

     } 
    }); 



    } 

    } 

et ce sera la classe étaient je veux dessiner l'objet en mouvement nommé patintero.java

package com.example.prototype2; 

import android.app.Activity; 
import android.os.Bundle; 

public class patintero extends Activity{ 

DrawDefender v; 

@Override 
protected void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    v = new DrawDefender(this); 
    setContentView(v); 


} 

} 

et enfin mon costume v IEW nommé DrawDefender.java

package com.example.prototype2; 

import android.content.Context; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.graphics.Rect; 
import android.view.View; 
import android.widget.LinearLayout; 

public class DrawDefender extends View{ 

Bitmap defender1; 
int x, y; 


public DrawDefender(Context context) { 
    super(context); 
    defender1 = BitmapFactory.decodeResource(getResources(), R.drawable.walk1); 
    x = 0; 
    y = 0; 

} 

@Override 
protected void onDraw(Canvas canvas) { 
    // TODO Auto-generated method stub 
    super.onDraw(canvas); 

    x = canvas.getWidth()/2; 
    if (y < canvas.getHeight()){ 
     y += 10; 
    } 
    for (int i = 0; y == 0; i++) { 
     y -= 10; 
    } 

    canvas.drawBitmap(defender1, x, y, new Paint()); 

} 

} 

i mal besoin d'aide .. est-il quelque chose de mal que je l'ai fait? Je suis un débutant dans Android s'il vous plaît aidez-moi :)

+0

pouvez-vous ajouter votre mise en page/carte. xml? – Squirrelkiller

Répondre

0

Je suppose, dans son état actuel, votre image se trouve juste au centre en haut de l'écran ne rien faire? C'est parce que vous le mettez là, chaque fois que votre vue est tirée.

Les méthodes onDraw sont appelées par votre vue chaque fois qu'elle doit se mettre à jour elle-même, ce qui est le cas lorsque vous appelez invalidate(); sur votre vue.

Pour l'utiliser, faire un gestionnaire (android.os.handler, pas la java un) dans votre point de vue et laissez invalider la vue après elle est dessinée:

import android.os.handler //should be imported autoamtically, jsut make sure it doesnt say java.something... 

Handler animHandler; // <- declare handler out of contructor so you can use it anywhere 

public DrawDefender(Context context){ 
    super(context); 
    defender1 = BitmapFactory.decodeResource(getResources(), R.drawable.walk1); 
    x = 0; 
    y = 0; 
    animHandler = new Handler(); 
} 

//For making the handler invalidate your view, see usage below 
Runnable r = new Runnable(){ 
    run(){ 
     invalidate(); 
    } 
}; 

onDraw(Canvas canvas){ 
    //Dont need super.onDraw(canvas), as it doesn't do anything. 
    //still do you other stuff, 
    //although that for loop gets completed before your view ever gets drawn, 
    //which is why your image always is at x=canvas.getWidth()/2 and y=0 
    //maybe do a java tutorial first to get into programming generally before specifically doing android, 
    //not sure how much experience you have here 

    animHandler.post(r); 
      //or .postDelayed(r, 30); to make framerate 30fps 
} 
+0

Je suis désolé d'avoir oublié de changer la condition de boucle, mais ça ne marche pas ... J'ai suivi un tutoriel et je l'ai copié exactement mais toujours le résultat est le même, chaque fois que je clique sur le bouton pour m'apporter animation l'application me ramène à l'écran principal. – yok2xDuran

+0

Exécutable r = new Exécutable() { run() { invalidate(); } }; donne l'erreur utilisé Runnable r = new Runnable() { \t public void run() { \t invalidate(); \t} \t}; à la place, est-ce exact? – yok2xDuran

+0

Droit désolé, aurait dû mentionner, votre IDE est toujours plus clair que moi;) Y at-il un message d'erreur dans le logcat le moment où la nouvelle activité s'ouvre/se ferme? – Squirrelkiller