2015-09-09 1 views
1

J'essaie de mettre en œuvre le masquage d'une image pour mon projet Android. Je suis en train d'accomplir la même chose que ci-dessous l'image:Android - Forme de masque dynamique

enter image description here

et la sortie serait le même que lien ci-dessous:

enter image description here

Le lien ci-dessous est proche de ce que je veux pour réaliser seulement que j'ai besoin de créer le masque à l'exécution et gérer onTouchListener pour dessiner le masque mais comment?

Masking(crop) image in frame

Je ne peux pas comprendre moi-même et je me sens coincé à ce problème. Toute aide ou tutoriel qui vous sera très utile.

Répondre

2

Bien que je n'aie pas écrit une solution complète, il pourrait vous montrer la bonne direction.

package com.example.masktest.app; 

import android.content.Context; 
import android.graphics.Bitmap; 
import android.graphics.Canvas; 
import android.graphics.Paint; 
import android.graphics.Path; 
import android.support.annotation.NonNull; 
import android.util.AttributeSet; 
import android.view.MotionEvent; 
import android.view.View; 

public class MaskDrawingView extends View { 

    private Path path = new Path(); 
    private Paint pathPaint = new Paint(); 

    public MaskDrawingView(Context context) { 
     super(context); 
     init(); 
    } 

    public MaskDrawingView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     init(); 
    } 

    public MaskDrawingView(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
     init(); 
    } 

    private void init() { 
     pathPaint.setStyle(Paint.Style.STROKE); 
     pathPaint.setAlpha(150); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     canvas.drawPath(path, pathPaint); 
     invalidate(); 
    } 

    @Override 
    public boolean onTouchEvent(@NonNull MotionEvent event) { 
     switch (event.getAction()) { 
      case MotionEvent.ACTION_DOWN: 
       path.lineTo(event.getX(), event.getY()); 
       break; 
     } 
     return super.onTouchEvent(event); 
    } 

    public Bitmap finishDrawingAndGetMask() { 
     pathPaint.setStyle(Paint.Style.FILL); 
     path.close(); 
     setDrawingCacheEnabled(true); 
     Bitmap result = Bitmap.createBitmap(getDrawingCache()); 
     setDrawingCacheEnabled(false); 
     path.reset(); 
     return result; 
    } 
} 
+0

Merci pour votre réponse, mais j'ai besoin que la vue soit ajustée lorsque l'utilisateur touche le bord même que la première image. –

+0

Dans ma classe, vous pouvez fondamentalement créer un masque en utilisant des touches pour votre image. Ensuite, vous avez juste besoin d'appliquer ce masque à votre image, si vous avez besoin de quelque chose d'autre, vous feriez mieux de fournir un exemple vidéo. – dtx12