free-tibet Posted December 5, 2012 Share Posted December 5, 2012 (edited) salut à tous ! je suis actuellement sur un projet ou je veux travailler sur une image. je dispose d'une image en fond, j'aimerais recouvrir par dessus une surface noir translucide, mais avec une partie complètement translucide. Voici une image du résultat final que je souhaiterai avoir: j'ai bien sur penser à dessiner 4 rectangles tout autour, mais j'espère obtenir une meilleur solution. Pouvez-vous m'aider ? Merci. Edited December 6, 2012 by free-tibet Quote Link to comment Share on other sites More sharing options...
taz067 Posted December 5, 2012 Share Posted December 5, 2012 (edited) heu il faut que la partie non grisé soit mobile ? quel taille l'image, quel résolution ? gif, png jpeg bmp ou flash ? tu as l'image d'origine ? Edited December 5, 2012 by taz067 Quote Link to comment Share on other sites More sharing options...
free-tibet Posted December 5, 2012 Author Share Posted December 5, 2012 En fait je veux selectionner une partie d'une image, je dois pouvoir modifier la position et la taille du cadre de sélection. J'ai finalement utilisé la solution de dessiner 4 rectangles autour de la partie à sélectionner. Pour ceux que ça intéresse voici le code de la classe que j'ai créé: public class TrimRectView extends ImageView { public TrimRectView(Context context) { super(context); } private int mTotalWidth, mTotalHeight, mStartX, mStartY, mSelectionWidth, mSelectionHeight; public void updateRect(int startX, int startY, int sizeX, int sizeY, int totalWidth, int totalHeight) { mStartX = startX; mStartY = startY; mSelectionWidth = sizeX; mSelectionHeight = sizeY; mTotalWidth = totalWidth; mTotalHeight = totalHeight; this.postInvalidate(); } public void onDraw(Canvas c) { Paint myPaint = new Paint(); //rectangle gauche myPaint.setColor(Color.argb(100, 0, 0, 0)); c.drawRect(0, 0, mStartX, mTotalHeight, myPaint); //rectangle haut myPaint.setColor(Color.argb(100, 0, 0, 0)); c.drawRect(mStartX, 0, mTotalWidth, mStartY, myPaint); //rectangle droite myPaint.setColor(Color.argb(100, 0, 0, 0)); c.drawRect(mStartX+mSelectionWidth, mStartY, mTotalHeight, mTotalHeight, myPaint); //rectangle bas myPaint.setColor(Color.argb(100, 0, 0, 0)); c.drawRect(mStartX, mStartY+mSelectionHeight, mStartX+mSelectionWidth, mTotalHeight, myPaint); } } ensuite il suffit d'ajouter un capteur d'évènement de type "onTouchListener" en appelant updateRect()... ça fonctionne très bien ! Merci quand même ! Quote Link to comment Share on other sites More sharing options...
free-tibet Posted December 5, 2012 Author Share Posted December 5, 2012 (edited) suite à ça je me suis poser une question. Je me suis toujours dis que j'avais la réponse mais j'aimerais une confirmation. les classes de type "View" disposent de méthodes "invalidate()" et "postInvalidate()". je me suis toujours dis ceci: invalidate() doit être appeler dans le thread principale, le threadUI, ou alors depuis un thread lancer depuis "runOnUiThread()" postInvalidate() peut être appeler de n'importe quel thread. cette affirmation est-elle correcte ? Merci ! Edited December 5, 2012 by free-tibet Quote Link to comment Share on other sites More sharing options...
chpil Posted December 6, 2012 Share Posted December 6, 2012 invalidate() doit être appeler dans le thread principale, le threadUI, ou alors depuis un thread lancer depuis "runOnUiThread()" postInvalidate() peut être appeler de n'importe quel thread. cette affirmation est-elle correcte ? Merci ! C'est exactement ce que dit la documentation, en tout cas ;) 1 Quote Link to comment Share on other sites More sharing options...
free-tibet Posted December 6, 2012 Author Share Posted December 6, 2012 ok merci ! ( je ne sais pas mettre résolut) Quote Link to comment Share on other sites More sharing options...
chpil Posted December 6, 2012 Share Posted December 6, 2012 (en éditant le titre de ton premier post) 1 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.