单击Horizo​​ntalScrollView的事件

时间:2013-06-17 19:21:56

标签: android onclick horizontalscrollview

我有一个horizo​​ntalscrollview里面有一堆图像。现在我需要检测点击事件,以防在其中点击任何图像。简而言之,我需要放置在horizo​​ntalscrollview内部的图像索引,点击它。

<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");
        }
    });

是否有解决方法可以在horizo​​ntalscrollview中显示所点击图像的索引?我想这可以通过“Gallery”小部件实现,但在API16中已弃用。任何人都可以通过Horizo​​ntalScrollView分享完成此任务的方法吗?

2 个答案:

答案 0 :(得分:3)

OnClickListener附加到ImageView中的每个HorizontalScrollView小部件。根据传递给View的{​​{1}},您将知道点击了哪个onClick()

具体做法是:

  • ImageView添加到布局中的每个android:onClick="heyMyImageGotClickedWhoHoo"元素。

  • 在加载此布局的活动中实施ImageView方法。在正文中,您可以使用public void heyMyImageGotClickedWhoHoo(View v)并将其与v.getId()窗口小部件ID(例如ImageView)进行比较,以确定点击的内容。

或者,您可以为每个R.id.imageview1创建专用方法,而不是将它们全部路由到一个。在这种情况下,每个ImageView属性都会有不同的值(例如android:onClick),并在活动中使用匹配方法(例如omgTheFirstImageWasClicked)。

答案 1 :(得分:0)

我认为ImageView的数量可能因您的情况而异。然后我会建议使用ID列表来记录它们。在将新ImageView插入Horizo​​ntalScrollView时,使用setId方法为每个ImageView添加一个自定义ID,然后将此ID添加到列表中。

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

如果ImageViews的数量是固定的,那么你当然可以使用经典数组:

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

然后你的onClick方法(你必须将它添加到每个ImageView)将如下所示:

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?