안녕하세요!


이미지 관련해서 질문드립니다 ㅠㅠ


Bitmap으로 이미지를 불러와 드래그를 하고 싶습니다. 현재 드래그 까지 다 구현됐지만 이미지를 드래그 했을시에만 이미지가 드래그되고 일반 화면을 드래그 했을시에는 드래그가 안되게 하고 싶습니다.


결론은 Bitmap에만 OnTouchListener를 적용 할 수 있냐는 문제입니다.


소스입니다.


package main.Test;


import android.app.Activity;

import android.content.Context;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.graphics.Canvas;

import android.graphics.Color;

import android.os.Bundle;

import android.view.MotionEvent;

import android.view.SurfaceHolder;

import android.view.SurfaceView;


public class TestActivity extends Activity {

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);


        int w=getWindowManager().getDefaultDisplay().getWidth()-25;

        int h=getWindowManager().getDefaultDisplay().getHeight()-25;


        BallView ballView=new BallView(this,w,h);

        setContentView(ballView);

    }

}


class BallView extends SurfaceView implements SurfaceHolder.Callback {

    private Bitmap bitmap ;

    private int x=20,y=20;int width,height;


    public BallView(Context context,int w,int h) {

        super(context);


        width=w;

        height=h;

        getHolder().addCallback(this);

        setFocusable(true);

    }


    @Override

    protected void onDraw(Canvas canvas) {

        super.onDraw(canvas);


        bitmap =BitmapFactory.decodeResource(getResources(), R.drawable.icon);

        canvas.drawColor(Color.BLUE);//To make background 

        canvas.drawBitmap(bitmap,x-(bitmap.getWidth()/2),y-(bitmap.getHeight()/2),null);

    }


    @Override

    public boolean onTouchEvent(MotionEvent event) {

        x=(int)event.getX();

        y=(int)event.getY();


        if(x<25)

            x=25;

        if(x> width)   

            x=width;

        if(y <25)

            y=25;

        if(y > 405)

            y=405;


        updateBall();


        return true;

    }


    @Override

    public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {

        // TODO Auto-generated method stub

    }


    @Override

    public void surfaceCreated(SurfaceHolder holder) {

        // TODO Auto-generated method stub

    }


    @Override

    public void surfaceDestroyed(SurfaceHolder holder) {

        // TODO Auto-generated method stub

    }


    private void updateBall() {

        Canvas canvas = null;

        try {

            canvas = getHolder().lockCanvas(null);

            synchronized (getHolder()) {

                this.onDraw(canvas);

            }

        }

        finally {

            if (canvas != null) {

                getHolder().unlockCanvasAndPost(canvas);

            }

        }

    }   

}