내일은코딩왕

내일은코딩왕

질문currentSelectedView = goods로 goods값 저장 시 발생하는 또 다른 문제에 대해서

먼저, 답변 너무 감사드립니다, 무린님!! 덕분에 1번 문제는 잘 해결이 되었습니다.   그런데, 여전히 버튼 클릭이벤트가 문제여서 추가 질문드립니다 ㅠㅠ (생성한 ImageView들이 순차적으로 순번을 가진다고 가정했을 때, 처음 생선된 애를 1번, 후에 생성된 애를 2번) 일단 버튼 클릭시 이벤트 적용은 됩니다만, 방금 생성된 애들만 적용이 된다는 제한이 있습니다. - 이전에 생성된 이미지뷰들을 바꾸고 싶을 때, 버튼 클릭시 이벤트 적용은 방금 생성된 애만 적용이 됩니다. - 갤러리 뷰에서 클릭시 생성된 시점의 currentSelectedView가 goods값을 계속 가지고 있으니까, 이전에 생성한 애들은 이벤트 적용이 안된다고 생각은 듭니다.   즉 1번 클릭시 1번을 바꾸고 싶은데, 1번 클릭시에도 후에 생성이 된 2번에 이벤트가 적용이 된다는 문제입니다. 앞에 올렸던 게시글과 큰 코딩의 변화는 없어서 생략하겠습니다.   염치없지만, 도움 부탁드리겠습니다 ㅠㅠㅠ
1.3K
3
0
무린
무린·2021-02-18
혹시 다음과 같이 currentSelectedView를 소스 상의 onClick 메소드에서 지정해보면 어떨지요. goods.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { view1=v; cur...

질문[안드로이드-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값을 줘서, 그거를 배열로 다 받아주는 것도 해봤고, 했는데, 진행을 못 시키겠더라고요 ㅠㅠ   염치없지만, 많은 도움 부탁드리겠습니다 
2.1K
1
1
0
무린
무린·2021-02-18
1) 먼저 이미지가 여러 개 복사되는 현상에 대해서 예상되는 부분은 onItemClick() 메소드 부분에 있는 for문이 어떤 용도인지 모르겠습니다만 아래와 같이 for문이 돌면서 addView()를 여러번 실행하여 100개의 이미지가 겹쳐 써진 것이 아닌가 싶습니다. for (int i = 0; i < 100; i++) { ... ...