图库上的ImageView无法点击

时间:2011-04-06 19:53:40

标签: android

我有一个包含setOnItemClickListenersetOnItemSelectedListener的全屏图库。在那个画廊,我有一个线性布局与3个ImageViews。我已经完成了可点击的图像视图,但是当我点击它们时,gallery.setOnItemClickListener就是被激活的。我怎样才能让他的ImageViews可点击?

Tha布局完整的布局非常复杂,所以我正在绘制相关部分的图像。

LayoutDescription

在我的代码中:

    ImageView prev = (ImageView) findViewById(R.id.previousImage);
    ImageView play = (ImageView) findViewById(R.id.playAllImages);
    ImageView next = (ImageView) findViewById(R.id.nextImage);

    prev.setClickable(true);
    prev.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            YADA YADA YADA ...
        }
    });

    next.setClickable(true);
    next.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            YADA YADA YADA ...
        }
    });

    play.setClickable(true);
    play.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            YADA YADA YADA ...
        }
    });

我也有画廊的听众:

_horizGallery.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
            YADA YADA YADA...
        }
    });


    _horizGallery.setOnItemSelectedListener(new OnItemSelectedListener() {
        public void onItemSelected(AdapterView parent, View view,
        int position, long id) {
            YADA YADA YADA...
        }

        public void onNothingSelected(AdapterView parent) {
                YADA YADA YADA...
            }
    });

xml是这样的(我拿出了一些不相关的部分,以便在实际使用时缩小它):

    <?xml version="1.0" encoding="utf-8"?>

<LinearLayout android:orientation="horizontal"
android:layout_height="wrap_content" android:layout_width="match_parent" 
android:background="#11000000" android:layout_alignParentBottom="true"
android:weightSum="1.0" android:id="@+id/layoutToScrollDown">

    <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content"
    android:orientation="horizontal" android:layout_weight="0.1" android:gravity="center">
        <ImageView android:layout_width="30dp" android:layout_height="30dp"  android:src="@drawable/icon"
        android:padding="1px" android:id="@+id/previousImage"> </ImageView>
    </LinearLayout>

    <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content"
    android:orientation="horizontal" android:layout_weight="0.4" android:gravity="center">
        <ImageView android:layout_width="30dp" android:layout_height="30dp"  android:src="@drawable/icon"
        android:padding="1px"  android:id="@+id/playAllImages"> </ImageView>
    </LinearLayout>

    <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content"
    android:orientation="horizontal" android:layout_weight="0.1" android:gravity="center">
        <ImageView android:layout_width="30dp" android:layout_height="30dp"  android:src="@drawable/icon"
        android:padding="1px"  android:id="@+id/nextImage"> </ImageView>
    </LinearLayout>

</LinearLayout>

<com.pixable.android.ModifiedGallery xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res/com.pixable.android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" android:id="@+id/HorizontalGallery"
    android:gravity="center_vertical" android:spacing="2px"/>

所有这些都在一个相对的观点中,由于某种原因没有显示出来。

2 个答案:

答案 0 :(得分:1)

我认为因为您对findViewById的调用只涉及外部父视图,即您的图库,所以点击它的任何地方都会触发图库的itemClickListener。

另外我认为将每个ImageView包装在自己的LinearLayout中会导致问题。您应该考虑在其中包含1个LinearLayout和ImageViews。

你需要做什么然后我认为是膨胀布局然后从该视图中检索ImageView以向其添加监听器。

View v = LayoutInflater.from(context).inflate(R.id.layoutToScrollDown,null);

或按如下方式对视图进行充气:

View v = View.inflate(context,R.id.layoutToScrollDown,null);

或者甚至可以尝试findviewbyid:

View v = findViewById(R.id.layoutToScrollDown);

然后获取ImageViews:

ImageView prev = (ImageView) v.findViewById(R.id.previousImage);
ImageView play = (ImageView) v.findViewById(R.id.playAllImages);
ImageView next = (ImageView) v.findViewById(R.id.nextImage);

然后,您可以照常继续关注您的代码。

我希望这有帮助!

答案 1 :(得分:0)

您的图库位于布局XML文件中的图像下方。这意味着图库在点击方面位于您的图像前面。

您需要在任何图片之前放置图库组件。考虑使用RelativeLayout作为外部元素。将图库组件放在LinearLayout之前,并将图片放入。将android:layout_alignParentTop="true"添加到图库,然后将android:layout_alignParentBottom="true"添加到LinearLayout容器。

此外,无需将每个ImageView包裹在LinearLayout内 - 这只会使您的应用的UI速度变慢。