안드로이드 개발 질문/답변
(글 수 45,052)
기본적으로 이미지가 스크롤에 나오는데
해당좌표 이상 넘어가면 새롭게 이미지 뷰를 추가해줍니다.
근데 그 새로생기는 이미지뷰에 온터치리스너를 이용했는데...
뭐 물론 작동은 잘 합니다. 헌데 문제가
스크롤을 이동하려면 이미지를 클릭해야하는데 인텐트가 실행되어 버리네요..
뭔가 설정할 방법이 없을까요..?
스크롤동안은 인텐트가 실행되지 않게해야하는데
리스터를 ACTION_UP해버리면 작동을안하고.. down 하면 손만대도 넘어가버리고..
어떻게해야할까요...
public boolean onTouch(View v, MotionEvent event) {
ScrollView svw = (ScrollView)findViewById(R.id.img_scroller);
// TODO Auto-generated method stub
if(event.getAction() == MotionEvent.ACTION_UP){
flag = 0;
scroll_flag_after = svw.getScrollY();
int getY = svw.getScrollY();
svw.setSmoothScrollingEnabled(true);
//svw.smoothScrollTo(0, svw.getScrollY());
// svw.scrollTo(0, getY+300); scroll 이동하기
if(img_cnt<10){
URL = "http://112.151.28.165/imageupload/item/content_0"+img_cnt+".png";
}else if(img_cnt>=10){
URL = "http://112.151.28.165/imageupload/item/content_"+img_cnt+".png";
}
//Toast.makeText(Menu_sale_detailActivity.this, URL, Toast.LENGTH_SHORT).show();
if(svw.getScrollY() > line && scroll_flag_after > scroll_flag_before ){
if(img_cnt<8){
img_cnt++;
line+= 400;
}else{
img_cnt--;
}
LinearLayout topLL1 = (LinearLayout)findViewById(R.id.RelativeLayout1); // 레이아웃 읽음
LinearLayout topLL2 = (LinearLayout)findViewById(R.id.RelativeLayout2); // 레이아웃 읽음
ImageView img1 = new ImageView(Menu_sale_detailActivity.this); // 이미지뷰 생성 , layout1
ImageView img = new ImageView(Menu_sale_detailActivity.this); // 이미지뷰 생성
img1.setImageResource(R.drawable.content_12);
img1.setAdjustViewBounds(true);
img1.setPadding(0, 20, 0, 0);
img.setImageResource(R.drawable.content_11); // 이미지 추가
img.setAdjustViewBounds(true);
img.setPadding(0, 20 , 0, 0);
img.setId(img_cnt);
img.setOnTouchListener(new OnTouchListener(){
public boolean onTouch(View v, MotionEvent event){
//Toast.makeText(Menu_sale_detailActivity.this, "img_cnt : "+v.getId(), Toast.LENGTH_SHORT).show();
if(event.getAction() == MotionEvent.ACTION_DOWN){ // Action_down 시에만 인텐트실행 ( 인텐트의 중복을 방지)
Intent intent = new Intent(Menu_sale_detailActivity.this, menu_1_1_1.class);
//intent.putExtra("item_nm", Integer.toString(v.getId()));
if(v.getId()<10){
URL = "http://112.151.28.165/imageupload/item/content_0"+(v.getId()-1)+".png";
}else if(v.getId()>=10){
URL = "http://112.151.28.165/imageupload/item/content_"+(v.getId()-1)+".png";
}
intent.putExtra("src_nm", URL);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
return true;
}
return false;
}
});
topLL1.addView(img1);
topLL2.addView(img); // 해당 레이아웃에 이미지 추가.
ImageDownloader.download(URL, img);
ImageDownloader.download(URL, img1);
} //좌표 860이상 if 문 끝
Log.e("t1_before1" , Double.toString(scroll_flag_before));
Log.e("t1_after1" , Double.toString(scroll_flag_after));
scroll_flag_before = svw.getScrollY();
return true;
}
return false;
}
어설프지만 자답합니다.
Flag와 스크롤의 위치를 읽어가면서 처리는가능한데 상당히 지저분하네요... Move 시에는 flag 를 0으로 주고
클릭하여 인텐트 넘어가기 직전에는 flag 를 1로 줬습니다. flag == 1 일때에는 인텐트 실행안되게 조건넣었구요..
드래그와 클릭의 차이는 action down 시의 getScrollY 와 action_up 시의 getScrollY 를 구하여 같지않을때로 ..조건을 주었습니다.
지저분하네요 ..