2011-08-10 5 views
1

Je suis nouveau au développement d'Android et j'ai un problème pour trouver comment ajouter une ligne dessinée sur une image. Je peux dessiner la ligne et l'afficher, ou je peux afficher l'image, mais je n'arrive pas à comprendre comment afficher les deux en même temps.Ajouter onDraw drawable sur le dessus de main.xml

Envisager un jauge de compteur de vitesse anolog. En main.xml j'ai un ImageView qui affiche une image du compteur de vitesse moins l'aiguille. Pour l'aiguille, je veux programmer une ligne et l'ajouter au-dessus de l'image de jauge.

Voici mon activité et code de la vue:

public class StartDraw extends Activity { 
    DrawView drawView; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     //setContentView(R.layout.main); 
     setContentView(new DrawView(this)); 

    } 

    final class DrawView extends View { 
     Paint paint = new Paint(); 

     public DrawView(Context context) { 
     super(context); 
      paint.setColor(Color.WHITE); 
      paint.setStrokeWidth(5); 
     } 

     @Override 
     protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 

      canvas.drawLine(30, 100, 150, 200, paint); 
     } 
    } 
} 

et voici mon fichier main.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
<ImageView android:src="@drawable/image" android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/imageView1"></ImageView> 
</LinearLayout> 

Comment puis-je afficher l'aiguille au-dessus de l'indicateur de vitesse? Toute aide est la bienvenue.

Répondre

1

Une option consiste à décomposer DrawView en un fichier de classe distinct. Vous pouvez ensuite l'ajouter en tant qu'élément dans LinearLayout de votre main.xml.

Une fois que vous appelez setContentView(R.layout.main);, vous pouvez obtenir une référence à l'instance drawView dans votre activité en faisant:

DrawView dv = (DrawView)findViewById(R.id.drawView); //use the actual id you define in your layout xml 
+0

Au lieu d'utiliser "canvas.drawLine (30, 100, 150, 200, peinture);" , Je vais utiliser quelque chose comme "canvas.drawLine (startx, starty, stopx, stopy, peinture);" avec startx, starty, stopx, et stopy calculé dans mon activité principale. Si je casse DrawView dans un fichier de classe séparé, comment puis-je utiliser les valeurs calculées dans mon activité principale pour mettre à jour les coordonnées utilisées dans drawLine de DrawView? – Bill

+0

J'ai édité ma question pour montrer comment vous obtenez une référence à l'instance DrawView. À ce stade, vous pouvez lui transmettre des informations. – elevine

+0

Merci! Ça fonctionne maintenant. – Bill