이동 될 (imageview)를 상속받아 확장하여 새로운 사용자 뷰를 만듭니다.
터치 이벤트를 오버로딩하시어 다운 이벤트시에 뷰를 안보이게 하고 그전에 뷰의 이미지를 캡쳐합니다.
이 캡쳐된 이미지를 윈도우 영역에 넣고 , 터치이벤트 무브 이벤트가 발생하면 이 캡쳐 이미지를 윈도우 영역에 그립니다. 터치이벤트 업 부분에서는 미리보기 이미지를 지워 주시고 imageview 를 다시 보이게 하시고, 드랍 된 부분이 원하시는 영역인지를 체크하시어 원하시는 영역이라면 해당 imageview의 글자를 표시하시면 됩니다.
구글링이 답이라 생각합니다.
참고 소스
윈도우 영역에 이미지 뷰 넣기
WindowManager.LayoutParams mWindowParams;
WindowManager mWindowManager;
WindowManager.LayoutParams mWindowParams = new WindowManager.LayoutParams();
mWindowParams.gravity = Gravity.TOP;
mWindowParams.x = dragImageX ;
mWindowParams.y = y - mDragPoint + mCoordOffset ;
mWindowParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
mWindowParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
mWindowParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams. FLAG_NOT_TOUCHABLE
| WindowManager.LayoutParams. FLAG_KEEP_SCREEN_ON
| WindowManager.LayoutParams. FLAG_LAYOUT_IN_SCREEN;
mWindowParams.format = PixelFormat.TRANSLUCENT;
mWindowParams.windowAnimations = 0;
ImageView v = new ImageView(mContext );
int backGroundColor = Color.parseColor( "#e0103010");
v.setBackgroundColor(backGroundColor);
v.setImageBitmap(bm);
mDragBitmap = bm;
WindowManager mWindowManager = (WindowManager)mContext .getSystemService("window");
mWindowManager.addView(v, mWindowParams );
mDragView = v;
이동시 이벤트시 받아서 위도우 영역에 표시
private void dragView(int x, int y) {
wlp.x = x - (width/2);
wlp.y = y - (height/2);
wm.updateViewLayout(iv_drag, wlp);
}