1

我有一个水平滚动视图,里面有一堆图像。现在我需要检测点击事件,以防点击其中的任何图像。简而言之,我需要放置在单击的水平滚动视图内的图像索引。

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

是否有解决方法来获取水平滚动视图中存在的单击图像的索引?我想它可以通过“图库”小部件来实现,但在 API16 中已弃用。任何人都可以分享一种通过 Horizo​​ntalScrollView 实现这一目标的方法吗?

4

2 回答 2

3

将一个附加OnClickListener到. 根据传入的,您将知道单击了哪个。ImageViewHorizontalScrollViewViewonClick()ImageView

具体来说:

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

  • 在加载此布局的活动中实现一个public void heyMyImageGotClickedWhoHoo(View v)方法。在正文中,您可以使用v.getId()它并将其与ImageView小部件 ID(例如R.id.imageview1)进行比较,以确定哪个被点击了。

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

于 2013-06-17T19:38:24.600 回答
0

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

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

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

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) - 如何避免 ID 冲突?

于 2013-06-17T19:56:34.103 回答