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

