You are calling requestLayout() from the draw method. requestLayout()
causes a draw to happen, and you've just created an infinite loop.

On Wed, Mar 3, 2010 at 4:42 PM, Alfonso <[email protected]> wrote:
> Well, I've found the way to replicate the avoiding cutting limits
> effect when rotate the ExtWebView. I just place a
> "this.layout(0,0,300,300);" and after it a "this.requestLayout()" at
> the end fo the onDrawMethod inside the ExtWebView class, looking so:
>
>
>       @Override
>       protected void onDraw(Canvas canvas) {
>                canvas.translate(0,320);
>                canvas.rotate(-90);
>                this.layout(0, 0, 300,300);
>                this.requestLayout();
>                super.onDraw(canvas);
>        }
>
> I needed this effect, so I'm happy with this solution. But my doubt is
> still there, is the ExtTextView interacting with ExtWebView's canvas
> when setting the minimum heigth and width? Is this a bug? And another
> two questions, why ExtWebView continues painting its content even if I
> delete the "super.onDraw(canvas);" line at the end of the onDraw
> method?  and why it doesn't work fine if I save and restore the canvas
> state at the begining and the end respectively of the onDraw method?
>
> Thanks for your help.
>
>
> On 26 feb, 04:37, Alfonso <[email protected]> wrote:
>> Hi, it's my first time writing here and I want giving thanks everybody
>> who makes the group possible. Specially to all the Android
>> developpers. Well, let's go to the problem: I'm trying to rotate a
>> WebView according with the orientation sensor. That's because below
>> this view I have a GLSurfaceView wich I don't want to rotate, so as
>> probably you'd have suppossed I set orientation in landscape mode,
>> avoiding the automatic rotate of the cell.
>>
>> To achieve my goal I include the class WebView in another one using
>> composition. This class is named, in example, ExtWebView and overrides
>> the onDraw method with canvas.rotate(-90) (after a translate). The
>> class ExtWebView extends the LinearLayout one. The problems begins
>> when I decide set the WebView in a non square portion of the screen
>> (not the whole one). So I add the WebView to the ExtWebView with
>> "addView(WebView, 200, 300);". In the main Activity I add the
>> ExtWebView with "addContentView(ExtWebView, new
>> LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));" so
>> it should being able to use the whole screen.
>>
>> And now come the problem. The rotated WebView appears initially fine
>> (rotated like expected), but if I slide my finger on it left or right
>> (coords are changed and works like up and down, but that doesn't worry
>> me) then only shows on the screen the portion of the View wich fits
>> into the bounds specified in the WebView with (200,300). In other
>> words, I rotate in the ExtVebView but it behaves like if I would the
>> WebView one (cutting the web page to its dimmensions).
>>
>> However, that's not the only one surprise (not the most interesting
>> one, at least for me). If I add a class wich extends TextView in the
>> main activity above the ExtWebView with the methods: setMinWidth(300)
>> and setMinHeight(300) (both of them inside the overrided onDraw
>> method) then ExtWebView shows the whole page rotated exactly like
>> expected, even behaves fine when sliding my finger on it, although the
>> portion of the web which before wasn't showed and yes now becomes
>> insensitive to my finger slidings. In a few words, with the
>> setMinWidth and setMinHeight methods the limits setted to 200x300 in
>> the WebView disappear. Is this a bug? Is there any other way of
>> achieving this effect? I`ve been looking inside the code of the
>> TextView and I think the question it is in the requestLayout() method
>> but I don't know where is implemented it's code.
>>
>> Any help will be wellcome.
>>
>> The code of ExtWebView is:
>>
>> public class ExtWebView extends LinearLayout {
>>
>>         public ExtWebView(Context context) {
>>                 super(context);
>>                 mContext = context;
>>                 init();
>>         }
>>
>>         public ExtWebView(Context context, AttributeSet params) {
>>                 super(context, params);
>>                 mContext = context;
>>                 init();
>>         }
>>
>>         private void init() {
>>                 pagWeb = new WebView(mContext);
>>                 pagWeb.getSettings().setJavaScriptEnabled(true);
>>                 setWillNotDraw(false); //force the use of the OnDraw
>> method
>>                 addView(pagWeb, 200, 300);
>>         }
>>
>>       �...@override
>>        protected void onDraw(Canvas canvas) {
>>                 canvas.translate(0,320);
>>                 canvas.rotate(-90);
>>                 super.onDraw(canvas);
>>     }
>>
>> }
>>
>> The ExtTextView one:
>>
>> public class ExtTextView extends TextView {
>>         public ExtTextView(Context context) {
>>                 super(context);
>>                 setText("Weird effect ...");
>>         }
>>
>>       �...@override
>>         protected void onDraw(Canvas canvas) {
>>                  canvas.save();
>>
>>                  this.setMinHeight(300);
>>                  this.setMinWidth(300);
>>
>>                  super.onDraw(canvas);
>>                  canvas.restore();
>>         }
>>
>> }
>>
>> and we add the views in the main activity with:
>>
>> ExtWebView.loadURL("file:///sdcard/test.html")  //Loading of the web
>> page
>>
>> addContentView(ExtWebView, new
>> LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));"
>>
>> addContentView(ExtTextView, new
>> LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));"
>
> --
> 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
>



-- 
Romain Guy
Android framework engineer
[email protected]

Note: please don't send private questions to me, as I don't have time
to provide private support.  All such questions should be posted on
public forums, where I and others can see and answer them

-- 
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

Reply via email to