That is funny :-)
Glad i could help.
On Thursday, November 1, 2012 1:32:19 AM UTC+2, Streets Of Boston wrote:
>
> Update:
>
> The weird 0x00100000 value is the value of *VERY_WIDE*, which is assigned
> to the Layout's width if the *TextView*'s *mHorizontallyScrolling *field*
> *is set to *true*.
>
> Calling *setHorizontallyScrolling(false)* or setting the *
> android:scrollHorizontally="false"* attribute in your XML does the trick
> as well :-)
>
> On Wednesday, October 31, 2012 7:11:33 PM UTC-4, Streets Of Boston wrote:
>>
>> Thanks Piren!
>>
>> Your answer led me into the right direction.
>>
>> This was the problem:
>>
>> The *ViewPager *contains *TextViews *as (grand-grand...) children.
>> Before it actually starts scrolling it asks if the touched child (or one of
>> the child's children) could scroll horizontally. If one of them does, the
>> *ViewPager* won't scroll horizontally itself. Instead, it lets this
>> child scroll.
>>
>> The *TextView* implements a method called '*canScrollHorizontally(int)*'.
>> It uses the *mLayout *member to determine this method's return value.
>> Sometimes, the *mLayout.mWidth* is 0x00100000 (= 1048576) and this
>> weird value causes this *canScrollHorizontallly *method to incorrectly
>> return *true *(instead of *false*).
>>
>> The method canScrollHorizontally is only available for API-level 14 or
>> up... this may explain the issue...
>>
>> For now, I just subclass my *TextView* that appear in the *ViewPager *and
>> override the *canScrollHorizontally *method, because I know the text in
>> these *TextViews *can never scroll horizontally.
>>
>> public class MyTextView extends TextView {
>> ...
>> @Override
>> public boolean canScrollHorizontally(int direction) {
>> return false;
>> }
>> ....
>> }
>>
>> On Wednesday, October 10, 2012 9:38:03 AM UTC-4, Piren wrote:
>>>
>>> The thing is that being Clickable shouldn't have any impact in this
>>> scenario. Although a clickable view always consumes the touch event, in
>>> ViewPager's case it should intercept it when it recognizes a drag gesture
>>> (see its onInterceptTouchEvent implementation).
>>>
>>> You should override onTouch and onInterceptTouchEvent for all your
>>> custom views and use logs to see how the events propagate through them (the
>>> proper behavior would be the button intercepting onTouch and once your
>>> finger moves enough in the X axes it should stop getting that event)
>>>
>>> My best guess is that the ViewPager cancels the drag because it believes
>>> your views have horizontal scrolling - I didnt dig all the way through, but
>>> it seems to be basing that mostly on child view sizes... since you said you
>>> have custom layout logic, i'm thinking it makes the ViewPager return the
>>> wrong result. try debugging ViewPager's canScroll method.
>>>
>>> they also have this comment in there: " // TODO: Add versioned support
>>> here for transformed views. This will not work for transformed views in
>>> Honeycomb+ ) " Kind of suspicious :)
>>>
>>>
>>> On Tuesday, October 9, 2012 11:57:28 PM UTC+2, Streets Of Boston wrote:
>>>>
>>>> The targetSdk is 11.
>>>> This is our hierarchy:
>>>>
>>>> -ViewPager
>>>> |
>>>> +-NoSaveStateFrameLayout
>>>> |
>>>> +-ProfileGridView
>>>> |
>>>> +-ProfileGridViewRow
>>>> |
>>>> +-FrameLayout
>>>> |
>>>> +-TextView
>>>>
>>>> Note that ProfileGridView contains one or more ProfileGridViewRows
>>>> which contains one or more clickable TextView (i.e. our buttons).
>>>> The ProfileGridView and ProfileGridViewRow are custom LinearyLayouts:
>>>> The have their own measure and layout-logic. These two subclasses don't
>>>> have any method or logic to capture or handle touch-events.
>>>>
>>>> Thanks!
>>>>
>>>> On Tuesday, October 9, 2012 11:31:03 AM UTC-4, Piren wrote:
>>>>>
>>>>> ViewPager is part of the support package and inherits from a ViewGroup
>>>>> , it shouldn't matter much which OS version it runs on.
>>>>> I have a similar setup and i dont experience this issue (using support
>>>>> package v4, i assume you're using the same since you said you tested on
>>>>> earlier os versions).
>>>>> I can even press a button and see it switch to its pressed state and
>>>>> then start a swipe without generating an onClick event.
>>>>>
>>>>> What is your targetSdkVersion?
>>>>>
>>>>> On Tuesday, October 9, 2012 4:27:31 PM UTC+2, Streets Of Boston wrote:
>>>>>>
>>>>>> Hi Kostya,
>>>>>>
>>>>>> Thanks for your answer.
>>>>>>
>>>>>> This bug (?) only happens on Jelly Bean (I don't have ICS devices to
>>>>>> test it on).
>>>>>> It works fine on Honeycomb and lower OS versions.
>>>>>>
>>>>>> It seems there is indeed a regression of the ViewPager in JB (and
>>>>>> possibly ICS).
>>>>>>
>>>>>> Thanks.
>>>>>>
>>>>>> On Tuesday, October 2, 2012 12:47:41 PM UTC-4, Kostya Vasilyev wrote:
>>>>>>>
>>>>>>> Sounds like a bug in how ViewPager dispatches events (sorry for
>>>>>>> stating the obvious). I'd consider looking at the source and comparing
>>>>>>> it
>>>>>>> to ScrollView (which handles nested touchable areas just fine).
>>>>>>>
>>>>>>> -- K
>>>>>>>
>>>>>>> 2012/10/2 Streets Of Boston <[email protected]>
>>>>>>>
>>>>>>>> Hi everyone,
>>>>>>>>
>>>>>>>> I have a ViewPager that contains pages, each page with a bunch of
>>>>>>>> Buttons (or clickable TextViews). When I set the buttons to
>>>>>>>> 'setClickable(false)', swiping the ViewPager to another page works
>>>>>>>> fine all
>>>>>>>> the time.
>>>>>>>>
>>>>>>>> However, when the buttons are clickable (OnClick listener is set),
>>>>>>>> the ViewPager won't do anything if the user put his or her finger down
>>>>>>>> on
>>>>>>>> the button when he or she starts a swipe or scroll. If the user
>>>>>>>> swipes, the
>>>>>>>> button 'eats' all the touch-events (MotionEvents).
>>>>>>>>
>>>>>>>> Is there a convenient way to make these buttons/textviews clickable
>>>>>>>> and make the ViewPager swipe even if the user puts his finger on a
>>>>>>>> button
>>>>>>>> initially?
>>>>>>>> (I'd like to avoid hacks and using GestureDetectors if possible)
>>>>>>>>
>>>>>>>> Thanks!
>>>>>>>>
>>>>>>>> --
>>>>>>>> You received this message because you are subscribed to the Google
>>>>>>>> Groups "Android Developers" group.
>>>>>>>> To post to this group, send email to
>>>>>>>> To unsubscribe from this group, send email to
>>>>>>>>
>>>>>>>> For more options, visit this group at
>>>>>>>> http://groups.google.com/group/android-developers?hl=en
>>>>>>>
>>>>>>>
>>>>>>>
--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en