2013-06-17 3 views
1

나는 내부에 가로축이있는 이미지를 가지고 있습니다. 이제 이미지가 클릭 된 경우 클릭 이벤트를 감지해야합니다. 요컨대, 나는 클릭 된 horizontalalscrollview 안에 배치 된 이미지의 인덱스가 필요합니다.HorizontalScrollView의 Click 이벤트

<HorizontalScrollView 
    android:id="@+id/horizontalScrollView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="@drawable/bgcolor" > 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="horizontal" > 

     <ImageView 
      android:id="@+id/imageview1" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:paddingRight="20dp" 
      android:src="@drawable/image1" /> 

     <ImageView 
      android:id="@+id/imageview2" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:paddingRight="20dp" 
      android:src="@drawable/image2" /> 

OnTouchListener 이벤트를 재생하려했지만 스크롤하는 동안 트리거되는 중입니다. 그리고 OnClickListener는 아무리 클릭해도 트리거되지 않았습니다.

horizontalScrollView1.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      System.out.println("Testing scrollview"); 
     } 
    }); 

horizontalscrollview 내부에 존재 클릭 한 이미지의 인덱스를 얻을 수있는 해결 방법이 있습니까? 나는 그것이 "갤러리"위젯을 통해 얻을 수 있다고 생각하지만, API16에서는 사용되지 않습니다. 누구든지 HorizontalScrollView를 통해이를 달성하기위한 접근법을 공유 할 수 있습니까?

답변

3

HorizontalScrollView에있는 ImageView 위젯 각각에 OnClickListener을 첨부하십시오. View을 (를) onClick()에 전달하면 ImageView을 (를) 클릭하면 알 수 있습니다. 특히

:

  • 이 레이아웃의 각 ImageView 요소에 android:onClick="heyMyImageGotClickedWhoHoo"를 추가합니다.

  • 이 레이아웃을로드하는 활동에서 public void heyMyImageGotClickedWhoHoo(View v) 메소드를 구현하십시오. 본문에서는 v.getId()을 사용하여 ImageView 위젯 ID (예 : R.id.imageview1)와 비교하여 클릭 한 항목을 확인할 수 있습니다.

또는, 전용 각 ImageView 방법보다는 경로들을 하나 모두를 만들 수 있습니다. 이 경우, 각 속성은 활동에서 일치하는 메소드 (예 : public void omgTheFirstImageWasClicked(View v))와는 다른 값 (예 : omgTheFirstImageWasClicked)을 갖게됩니다.

+0

당신은 샘플 의사 코드 FO를 공유 할 수 이 접근법? –

+0

@ user1816463 : 업데이트를 참조하십시오. – CommonsWare

+0

감사합니다. @commonsware! 나는이 접근법을 점검하려고 노력할 것이다. –

0

귀하의 경우 ImageView의 수가 다를 수 있다고 가정합니다. 그런 다음 ID 목록을 사용하여 기록을 남기는 것이 좋습니다. HorizontalScrollView에 새로운 ImageView를 삽입하는 동안 setId 메서드를 사용하여 각 ImageView에 사용자 정의 ID를 추가 한 다음이 ID를 목록에 추가하십시오. ImageViews의 수는 고정되어있는 경우

int uniqueID = getNewID(); 
myImage.setId(uniqueID); 
myIdList.add(uniqueID); 
myScrollView.addView(myImage); 

는, 당신은 물론 고전적인 배열을 사용할 수 있습니다

int[] ids = {R.id.firstImage, R.id.secondImage}; 

그런 다음 온 클릭 방식 (각 이미지 뷰에 추가해야합니다) 다음과 같이 표시됩니다

public void onClick(View v) { 
    for(int i=0; i<ids.size(); i++) { 
     if(v.getId() == ids.get(i)) { 
      Toast.makeText(this, "Index "+(i+1), Toast.LENGTH_SHORT).show(); 
     } 
    } 
} 

편집 : 유효한 ID를 만드는 방법 - Android: View.setID(int id) programmatically - how to avoid ID conflicts?

+0

감사합니다 @daemontus뿐만 아니라 미래에 horizontalalscrollview 내 경우에는 동적 imageviews 것 입니다이 방법을 공유합니다. –