2015-09-09 6 views
1

Я пытаюсь реализовать Маскирование изображения для моего проекта Android. Я пытаюсь сделать то же самое, как показано ниже изображения:Android - Dynamic Mask Shape

enter image description here

и результат будет таким же, как показано ниже ссылке:

enter image description here

Ссылка ниже близка к тому, что я хочу для достижения только того, что мне нужно создать маску во время выполнения и обработать onTouchListener, чтобы нарисовать маску, но как?

Masking(crop) image in frame

Я не могу понять себя, и я чувствую, застрял на эту проблему. Любая помощь или учебники, которые помогут, высоко оценены.

ответ

2

Хотя я не написал полное решение, оно может показать вам правильное направление.

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

Благодарим за отзыв, но мне нужно, чтобы изображение было отрегулировано, когда пользователь касается края так же, как и первое изображение. –

+0

В моем классе вы можете создать маску, используя штрихи для вашего изображения. Тогда вам просто нужно применить эту маску к своему изображению, если вам нужно что-то другое, вам лучше предоставить пример видео. – dtx12