2010-06-11 3 views
4

비트 맵 이미지의 터치 된 영역을 투명하게 만드는 작업 (지우기처럼 보임)이 도움이 필요합니다. 해당 이미지에 손가락을 대고 있습니다.Android에서 터치하면 오버레이 이미지가 투명하게 보이게됩니까?

알파 채널이 포함 된 PNG 파일이 있습니다. 터치 한 픽셀을 투명하게 바꾸어 사용자가 실제로 지울 수 있다고 느낄 수 있도록하고 싶습니다.

이 경우 프레임 레이아웃을 사용하여 2 개의 레이어를로드합니다. 아래쪽 레이어는 내용 용이며 위쪽 레이어는 지우기 용 이미지 뷰입니다. 사용자가 터치하여 손가락을 움직일 때 상위 레이어를 지워야합니다.

투명하게 만드는 방법이 없습니다. 누구든지 이걸 도와주세요. 가능한 경우이 이미지 프로세싱을 처음 접했기 때문에 샘플 코드로 직접 안내해주십시오.

미리 감사드립니다.

답변

11

당신이 필요 http://groups.google.com/group/android-developers/browse_thread/thread/5b0a498664b17aa0/de4aab6fb7e97e38?lnk=gst&q=erase+transparent#

: 안드로이드 개발자 그룹이 스레드를 참조

mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC)) 

을하고 또한 Color.TRANSPARENT

무승부 : 그림판 개체의 PorterDuff 모드를 설정

+0

Brilliant .. 너무 간단 :) –

+0

데모 예제로 해결 된 솔루션보기 ... http://whats-online.info/science-and-tutorials/137/Android-tutorial-How-to-erase-part- of-bitmap-image-on-touch / –

0

이미지 뷰가 투명하고있는 불투명하다 나도 몰라 0에서 255 사이의 정수를 취하는 setAlpha 방법을 가지고 있지만 그것을 시도하는 데 시간이 오래 걸릴해서는 안 : P

+3

안녕하세요. 답장을 보내 주셔서 감사합니다. setAlpha()는 전체 이미지를 투명하게 만듭니다. 나는 사용자가 손가락으로 접촉하거나 이미지 위에서 손가락을 움직이는 것과 같은 행동을 원한다. 그 부분은 투명하게 변해야한다. – Andhravaala

0

작동하지만 경로를 그리지 않았습니다.

import android.app.Activity; 
import android.content.Context; 
import android.graphics.Bitmap; 
import android.graphics.Bitmap.Config; 
import android.graphics.BlurMaskFilter.Blur; 
import android.graphics.BitmapFactory; 
import android.graphics.BlurMaskFilter; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.graphics.PorterDuff.Mode; 
import android.graphics.PorterDuffXfermode; 
import android.os.Bundle; 
import android.view.MotionEvent; 
import android.view.View; 

public class StartActivity extends Activity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(new TouchView(this)); 


} 

class TouchView extends View{ 
    Bitmap bgr; 
    Bitmap overlayDefault; 
    Bitmap overlay; 
    Paint pTouch; 
    int X = -100; 
    int Y = -100; 
    Canvas c2; 

    public TouchView(Context context) { 
     super(context); 

     bgr = BitmapFactory.decodeResource(getResources(),R.drawable.bgr); 
     overlayDefault = BitmapFactory.decodeResource(getResources(),R.drawable.over); 
     overlay = BitmapFactory.decodeResource(getResources(),R.drawable.over).copy(Config.ARGB_8888, true); 
     c2 = new Canvas(overlay); 

     pTouch = new Paint(Paint.ANTI_ALIAS_FLAG);   
     pTouch.setXfermode(new PorterDuffXfermode(Mode.SRC_OUT)); 
     pTouch.setColor(Color.TRANSPARENT); 
     pTouch.setMaskFilter(new BlurMaskFilter(15, Blur.NORMAL)); 


    } 

    @Override 
    public boolean onTouchEvent(MotionEvent ev) { 

     switch (ev.getAction()) { 

      case MotionEvent.ACTION_DOWN: { 

       X = (int) ev.getX(); 
       Y = (int) ev.getY(); 
       invalidate(); 

       break; 
      } 

      case MotionEvent.ACTION_MOVE: { 

        X = (int) ev.getX(); 
        Y = (int) ev.getY(); 
        invalidate(); 
        break; 

      }   

      case MotionEvent.ACTION_UP: 

       break; 

     } 
     return true; 
    } 


    @Override 
    public void onDraw(Canvas canvas){ 
     super.onDraw(canvas); 

     //draw background 
     canvas.drawBitmap(bgr, 0, 0, null); 
     //copy the default overlay into temporary overlay and punch a hole in it       
     c2.drawBitmap(overlayDefault, 0, 0, null); //exclude this line to show all as you draw 
     c2.drawCircle(X, Y, 80, pTouch); 
     //draw the overlay over the background 
     canvas.drawBitmap(overlay, 0, 0, null); 

    } 


} 


}