2016-01-31 1 views
-1

J'ai une disposition d'image (plein écran) qui sert de conteneur pour une autre disposition d'image qui montre l'aperçu de la caméra. Maintenant, je veux montrer au-dessus de l'aperçu de la caméra un cercle d'un rayon donné. Le rayon doit changer en fonction de certaines propriétés de l'image d'aperçu en cours. Je sais que je peux ajouter des dispositions (semi-transparentes) "au-dessus" de la disposition d'image que j'utilise pour l'aperçu de la caméra, mais je ne suis pas sûr de la meilleure façon de montrer ce cercle de "superposition". Le cercle doit être centré, avoir une ligne continue mais ne pas être rempli, c'est-à-dire être transparent et son arrière-plan doit être transparent.Dessiner un cercle en superposition dans une disposition d'image

+0

Avez-vous essayé quelque chose, comme utiliser un dessinable? –

+0

Donc, je peux utiliser un dessinable, qui est créé par programme et le montrer au-dessus de l'activité actuelle - aussi simple? C'est à dire. Je n'ai pas besoin de "l'intégrer" dans le xml. Logique de mise en page? – Settembrini

+1

Vous pouvez afficher un dessin, par ex. une imageview. –

Répondre

1

Vous pouvez créer votre propre classe View dans votre classe d'activité existante. Voici ma classe.

class CanvasView extends View { 

    private Paint paint; 

    public CanvasView(Context context){ 
     super(context); 
     //Customize your own properties 
     paint = new Paint(); 
     paint.setColor(Color.BLACK); 
     paint.setStyle(Paint.Style.STROKE); 
     paint.setStrokeWidth(10f); 
    } 

    @Override 
    protected void onDraw(Canvas canvas){ 
     super.onDraw(canvas); 
     paint.setColor(Color.RED); 
     canvas.drawCircle(enter coords and radius here); 
    } 


} 

Vous pouvez appeler la méthode onDraw à partir de cette classe en appelant la méthode Invalidate() ..

Voici comment vous pouvez l'ajouter à votre disposition .. En supposant que vous déclarez une classe CanvasView, appelé drawable, et votre Framelayout, appelé main_layout, vous l'ajoutez à votre framelayout existant en faisant ...

CanvasView drawable = new CanvasView(getApplicationContext()); 
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
main_layout.addView(drawable, params); 

espère que cela fonctionne!

+0

Vous devriez changer RelativeLayout.LayoutParams à FrameLayout.LayoutParams .... Même va de l'autre côté :) – drew

+0

Merci, dessiné, ça marche, solution élégante! – Settembrini

+0

Juste comme un Addition: puisque le cercle dépendra de l'aperçu actuel de la caméra (ie montrer un cercle à la fois) J'ai dû inclure dans la Classe d'activité une variable de classe (CanvasView) last_drawable et la mettre à last_drawable = drawable juste après ajouter la dernière instruction .addView(). Ensuite, je pourrais utiliser ((ViewManager) last_drawable.getParent()). RemoveView (last_drawable) afin de supprimer le dernier cercle, avant d'en dessiner un nouveau. – Settembrini