질문[안드로이드-JAVA] 갤러리뷰에서 생성된 이미지뷰 드래그 앤 드랍
안녕하세요~ 코린이 입니다!! 현재 제가 공부하면서 만들고 있는 안드로이드 프로젝트에 질문이 있어 글을 올립니다.. 아직 코린이라서, 다소 두서 없을 수 있는 점,, 미리 양해드립니다.. 1. 프로젝트 환경 : 프로그램은 Android Studio이고, Java언어로 개발하고 있습니다. 2. 프로젝트 내용 : 싸이월드 미니룸 꾸미기와 같은, 간단한 미니룸 꾸미기 게임 <InteriorActivity 실행화면> 우측 상단에 보시다시피, 카테고리별 인테리어 사진들을 갤러리 뷰로 생성한 상태입니다. 그리고 파란색으로 1이라고 되어 있는게, 갤러리뷰 중 아이템을 클릭했을 때, 생성된 ImageView입니다. <ListAdapter 라는 이름으로 BaseAdapter를 상속받는 클래스입니다. 다른 중요한 내용은 없어서 getView만 올립니다> @Override public View getView(int position, View convertView, ViewGroup parent) { ImageView imageView; if (convertView == null) { imageView = new ImageView(context); imageView.setScaleType(ImageView.ScaleType.FIT_XY); imageView.setLayoutParams(new Gallery.LayoutParams(150, 250)); imageView.setPadding(5, 5, 5, 5); } else { imageView = (ImageView) convertView; } imageView.setImageResource(drawIds[position]); return imageView; } } <그 다음, InteriorActivity 코드입니다 > InteriorActivity 화면의 우측상단에 보이는 카테고리에, onClicked 이벤트를 줘서, 클릭시 해당 카테고리의 갤러리를 출력하고, 그 갤러리 중 하나를 클릭했을 때, 보시는 것 처럼 1번 자리에, 클린한 ImageView가 생성이 됩니다. <여기 코드에서 goods는 1번 ImageView id입니다.> public void onClicked (View view){ switch (view.getId()) { case R.id.furniture: adapter = new ListsAdapter(this, Data.furnitures); gallery.setAdapter(adapter); gallery.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { for (int i = 0; i < 100; i++) { goods = new ImageView(getBaseContext()); goods.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); goods.setScaleX((float) 0.5); goods.setScaleY((float) 0.5); goods.setImageResource(Data.furnitures[position]); layout.addView(goods); goods.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { view1=v; } }); goods.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { float oldXvalue = 0; float oldYvalue = 0; int width = ((ViewGroup) v.getParent()).getWidth() - v.getWidth(); int height = ((ViewGroup) v.getParent()).getHeight() - v.getHeight(); if (event.getAction() == MotionEvent.ACTION_DOWN) { oldXvalue = event.getX(); oldYvalue = event.getY(); } else if (event.getAction() == MotionEvent.ACTION_MOVE) { v.setX(event.getRawX() - oldXvalue); v.setY(event.getRawY() - (oldYvalue + v.getHeight())); } else if (event.getAction() == MotionEvent.ACTION_UP) {//여기서 부터는 이제 위치를 설정할건데, 최종 위치에 제약걸기 if (v.getX() > width && v.getY() > height) { //??이게 무슨 말이지 == 최대값 인듯 v.setX(width); v.setY(height); } else if (v.getX() < 0 && v.getY() > height) { v.setX(0); v.setY(height); } else if (v.getX() > width && v.getY() < 0) { v.setX(width); v.setY(0); } else if (v.getX() < 0 && v.getY() < 0) { v.setX(0); v.setY(0); } else if (v.getX() < 0 || v.getX() > width) { if (v.getX() < 0) { v.setX(0); v.setY(event.getRawY() - oldYvalue - v.getHeight()); } else { v.setX(width); v.setY(event.getRawY() - oldYvalue - v.getHeight()); } } else if (v.getY() < 0 || v.getY() > height) { if (v.getY() < 0) { v.setX(event.getRawX() - oldXvalue); v.setY(0); } else { v.setX(event.getRawX() - oldXvalue); v.setY(height); } } } v.invalidate(); return true; } }); } } }); break; <이제 문제입니다..> 1번 클릭했을 때, 드래그 앤 드랍은 잘 됩니다만, 1번이 움직여서 다른 자리에 가게 하고 싶은데 1번은 가만히 있고, 1번이 복사가 되어서 다른 위치로 갑니다,, 1번이 복사가 되는게 아니라, 1번을 움직이게 하고 싶은데 어떻게 해야 할까요?? <연관된 또 다른 문제입니다.> 좌측 상단에 버튼 클릭시 확대, 축소, 로테이트 등등의 기능 이벤트를 클릭한 뷰에 적용시키고 싶은데, 제가 클릭한 놈한테 어떻게 적용시켜야 할지 도통 모르겠습니다.. 뷰 생성시에 각각 tag나 id값을 줘서, 그거를 배열로 다 받아주는 것도 해봤고, 했는데, 진행을 못 시키겠더라고요 ㅠㅠ 염치없지만, 많은 도움 부탁드리겠습니다