Skip to content Skip to sidebar Skip to footer

How To Disable Button Looking "pressed" When Gallery Slide Is Pressed?

I have a gallery. Each slide has a button inside. I have a custom layout which with I'm inflating the slides. Attached a click listener to the button and it works well, gallery als

Solution 1:

Found a workaround for this. It's horrible, but it works.

First of all, the part of Gallery's code responsible for my problem is this:

public boolean onDown(MotionEvent e) {

    // Kill any existing fling/scroll
    mFlingRunnable.stop(false);

    // Get the item's view that was touched
    mDownTouchPosition = pointToPosition((int) e.getX(), (int) e.getY());

    if (mDownTouchPosition >= 0) {
        mDownTouchView = getChildAt(mDownTouchPosition - mFirstPosition);
        mDownTouchView.setPressed(true);
    }

    // Reset the multiple-scroll tracking state
    mIsFirstScroll = true;

    // Must return true to get matching events for this down event.
    return true;
}

More exactly this line:

mDownTouchView.setPressed(true);

Here the layout of my slide is pressed and the default behaviour of setPressed of LinearLayout is dispatching it to all childrens so all children are pressed.

First I tried making a subclass of Gallery and override onDown. If I just returned false and nothing else, it worked but the slides got strange behaviour of jumping to the next slide when touched. That was because of this line:

 mFlingRunnable.stop(false);

Which was not executed. Since this variable is private and related to everything else in Gallery class I didn't find a way to use it from the subclass. I tried also copying all the Gallery code, but it also didn't work, because it uses lot of things which only have package access... etc.

So I created a subclass of LinearLayout, which overrides onSetPressed:

public class LinearLayoutOnSetPressedDoNothing extends LinearLayout {

public LinearLayoutOnSetPressedDoNothing(Context context, AttributeSet attrs) {
    super(context, attrs);
}

@Override
public void setPressed(boolean pressed) {
}
}

And use that in my layout instead of the LinearLayout:

<?xml version="1.0" encoding="utf-8"?>
<com.test.LinearLayoutOnPressDoNothing
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
 >

    <!-- content -->
</com.test.LinearLayoutOnPressDoNothing>

And well, this works.


Post a Comment for "How To Disable Button Looking "pressed" When Gallery Slide Is Pressed?"