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 <flying...@gmail.com>
>>>>>>>
>>>>>>>> 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 android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to