마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 Bitmap으로 이미지 불러왔을 때 배경에 대한 질문입니다.

0 추천
안드로이드 그림판 제작중입니다.

기능 추가로 이모티콘을 구현 중입니다.

일단 그림판에 그림을 그리고 난 뒤 이모티콘을 선택하면 이모티콘 이동과 크기 조절이 가능합니다.

허나 이모티콘 선택 시 기존에 그려놓아둔 이미지가 잠시 안보이게 되며, 이모티콘 삽입 이후에는 이전에 그려둔 그림이 다 보입니다. 제 생각으론 이모티콘 이동 가능한 거리전체에 배경을 흰색으로 둔거 같은데, 이것을 투명색으로 가능한건가요?

이모티코은 Bitmap형식으로 불러와 Rect형태로 전송됩니다.

 

이해가 안되실 수 도 있으니 소스코드 일부입니다.

 

// Image를 인자로 받는다.
    public MovingUnit(Bitmap Image) {
        // TODO Auto-generated constructor stub
        
        this.Image = Image;
        
        setSize(Image.getHeight(), Image.getWidth());
        setXY(200, 300);
    }

public void TouchProcess(MotionEvent event) {
        int act = event.getAction();
        
        switch (act & MotionEvent.ACTION_MASK) {
        case MotionEvent.ACTION_DOWN: // 첫번째 손가락 터치
            if (InObject(event.getX(), event.getY())) {// 손가락 터치 위치가 이미지 안에 있으면
                                                        // DragMode가 시작된다.
                posX1 = (int) event.getX();
                posY1 = (int) event.getY();
                offsetX = posX1 - X;
                offsetY = posY1 - Y;

                Log.d("zoom", "mode=DRAG");

                mode = DRAG;
            }
            break;

        case MotionEvent.ACTION_MOVE:
            if (mode == DRAG) { // 드래그 중이면, 이미지의 X,Y값을 변환시키면서 위치 이동.
                X = posX2 - offsetX;
                Y = posY2 - offsetY;
                posX2 = (int) event.getX();
                posY2 = (int) event.getY();
                if (Math.abs(posX2 - posX1) > 20
                        || Math.abs(posY2 - posY1) > 20) {
                    posX1 = posX2;
                    posY1 = posY2;
                    Log.d("drag", "mode=DRAG");
                }

            } else if (mode == ZOOM) { // 핀치줌 중이면, 이미지의 거리를 계산해서 확대를 한다.
                newDist = spacing(event);

                if (newDist - oldDist > 20) { // zoom in
                    float scale = FloatMath
                            .sqrt(((newDist - oldDist) * (newDist - oldDist))
                                    / (Height * Height + Width * Width));
                    Y = Y - (Height * scale / 2);
                    X = X - (Width * scale / 2);

                    Height = Height * (1 + scale);
                    Width = Width * (1 + scale);

                    oldDist = newDist;

                } else if (oldDist - newDist > 20) { // zoom out
                    float scale = FloatMath
                            .sqrt(((newDist - oldDist) * (newDist - oldDist))
                                    / (Height * Height + Width * Width));
                    scale = 0 - scale;
                    Y = Y - (Height * scale / 2);
                    X = X - (Width * scale / 2);

                    Height = Height * (1 + scale);
                    Width = Width * (1 + scale);

                    oldDist = newDist;
                }
            }
            break;

        case MotionEvent.ACTION_UP: // 첫번째 손가락을 떼었을 경우
        case MotionEvent.ACTION_POINTER_UP: // 두번째 손가락을 떼었을 경우
            mode = NONE;
            break;
        case MotionEvent.ACTION_POINTER_DOWN:
            // 두번째 손가락 터치(손가락 2개를 인식하였기 때문에 핀치 줌으로 판별)
            mode = ZOOM;
            newDist = spacing(event);
            oldDist = spacing(event);
            Log.d("zoom", "newDist=" + newDist);
            Log.d("zoom", "oldDist=" + oldDist);
            Log.d("zoom", "mode=ZOOM");

            break;
        case MotionEvent.ACTION_CANCEL:
        default:
            break;
        }

    }
블링c (120 포인트) 님이 2014년 6월 7일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...