moijdik Posté(e) 1 avril 2013 Share Posté(e) 1 avril 2013 hello j'aimerais savoir s'il est possible, au sein d'une vue XML (un layout), d'afficher un encart (par exemple une SurfaceView) dans lequel tourne une activité java... ou l'inverse, un encart xml au sein de la Vue d'une activité java. Bref, peut-on mélanger xml et java sur un même écran? PS: Je dis 'au sein de' mais ça peut être aussi 'au dessus de' Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
moijdik Posté(e) 1 avril 2013 Auteur Share Posté(e) 1 avril 2013 (modifié) ici, on parle de dessiner un layout dans un canvas mais ça ne marche pas chez moi, il n'y a rien qui s'affiche Modifié 1 avril 2013 par moijdik Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 2 avril 2013 Share Posté(e) 2 avril 2013 Insérer programmatiquement des éléments dans une vue XML préalablement chargée, oui, c'est possible Insérer une Activity dans une autre, non. Par contre, tu as le mécanisme des Fragment pour faire quelque chose d'équivalent Mais, quel est ton besoin ? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
moijdik Posté(e) 3 avril 2013 Auteur Share Posté(e) 3 avril 2013 (modifié) en gros j'ai des éléments dans un layout que je bouge avec le doigts et j'aimerais idéalement tracer des traits sur une surcouche transparente sous forme de canvas java (on voit le layout derrière et on peut encore le 'toucher'). Ca m'éviterait de faire dans un canvas java uniquement et y dessiner des objets simiaires à ceux que l'on trouve dans un layout... Ou alors peut-on tracer une ligne dans un layout, j'ai rien trouvé. (j'ai imaginé un moyen, par exemple une image avec transparence dans laquelle un trait est dessiné en diagonale et de tracer ce 'trait' entre 2points, mais en fonction de la distance entre ces 2points, l'épaisseur du trait varie...) Ca marche chez vous l'exemple que j'ai trouvé? Modifié 3 avril 2013 par moijdik Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
chpil Posté(e) 3 avril 2013 Share Posté(e) 3 avril 2013 Pour dessiner des formes géométriques, tu peux utiliser les ShapeDrawable. Cela me parait pouvoir te convenir, c'est utilisable programmatiquement : doc Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
moijdik Posté(e) 3 avril 2013 Auteur Share Posté(e) 3 avril 2013 (modifié) ok, avec Bitmap b = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888); Canvas c = new Canvas(b); je devrais pouvoir dessiner dans le canvas et ensuite adapter la bitmap à une imageView dans un layout (faudra gérer la transparence) : SurfaceView maSurfaceView = (SurfaceView)findViewById(R.id.surface); maSurfaceView.draw(c); Cela suggère une gestion de calque avec un niveau par calque (par exemple tracer un cercle au dessous de boutons), est-ce possible (par exemple un objet ayant pour caractéristique android:layout_level="3" se trouverait au dessus de ceux qui sont affublés d'un android:layout_level="2" et en dessous d'un android:layout_level="4" et au même niveau qu'un android:layout_level="3")? Je ne trouve rien... Le niveau des 'calques' ne serait que l'ordre d'apparition dans le layout? En fait il faudrait que l'imageView (que je compte modifier via le canvas dans une classe java) apparaisse avant les boutons dans le layout. Mais j'imagine que cet ordre ne peut être modifié dynamiquement... Modifié 3 avril 2013 par moijdik Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
moijdik Posté(e) 9 avril 2013 Auteur Share Posté(e) 9 avril 2013 voici du code pour pouvoir dessiner sur une image plein écran (avec la barre d'action bien sûr, pas moyen de l'enlever celle-là) import android.app.Activity; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.Rect; import android.os.Bundle; import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.view.View.onclickListener; import android.view.View.OnTouchListener; import android.widget.Button; import android.widget.ImageView; public class machinChoz extends Activity implements onclickListener, OnTouchListener { ImageView affichage; Canvas canvas; Paint paint; Matrix matrix; float downx = 0, downy = 0, upx = 0, upy = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.machinChoz); affichage = (ImageView)findViewById(R.id.affichage); Button bouton1 = (Button)findViewById(R.id.button1); bouton1.setonclickListener(new View.onclickListener() { @Override public void onclick(View v) {envoi(); } }); } public void envoi() { affichage.buildDrawingCache(); Bitmap bb = affichage.getDrawingCache(); canvas = new Canvas(bb); paint = new Paint(); paint.setColor(Color.GREEN); paint.setStrokeWidth(5); matrix = new Matrix(); canvas.drawBitmap(bb, matrix, paint); affichage.setImageBitmap(bb); affichage.setOnTouchListener(this); } @Override public boolean onTouch(View v, MotionEvent event) { int action = event.getAction(); switch (action) { case MotionEvent.ACTION_DOWN: downx = event.getX(); downy = event.getY(); break; case MotionEvent.ACTION_MOVE: upx = event.getX(); upy = event.getY(); canvas.drawLine(downx, downy, upx, upy, paint); affichage.invalidate(); downx = upx; downy = upy; break; case MotionEvent.ACTION_UP: upx = event.getX(); upy = event.getY(); canvas.drawLine(downx, downy, upx, upy, paint); affichage.invalidate(); break; case MotionEvent.ACTION_CANCEL: break; default: break; } return true; } @Override public void onclick(View arg0) { } } et le xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <ImageView android:id="@+id/affichage" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_marginLeft="0dp" android:layout_marginTop="0dp" android:src="@drawable/blanc" /> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:layout_marginRight="107dp" android:layout_marginTop="202dp" android:text="Button" /> </RelativeLayout> idéalement, le bout de code dans envoi() que l'on lance via le bouton est à mettre dans OnCreate mais il y a alors un crash. On est obligé de passer par cette méthode, ou alors trouvez mieux! l'image blanc.jpg doit avoir le même ratio que le plein écran (moins l'actionBar). L'écran mesure chez moi 1024*600, 1024*540 en tenant compte de l'actionBar, soit un ratio 1.8. Une image 800*433 convient donc Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Rejoignez la conversation
Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.