Thanks for the explanation. We worked around this behavior send
separate messages to a Handler on the UI thread. I'm curious, though,
to why Android doesn't handle the invalidate regions separately.

On Apr 9, 11:46 am, Romain Guy <romain...@google.com> wrote:
> setText() invalidates the TextView entirely and when two invalidates
> happen in the same UI event (as it is the case in your code), the
> invalidate region becomes the union of the two original invalidate
> regions.
>
>
>
> On Wed, Apr 8, 2009 at 6:40 PM, Leisuresuit Larry <larrywan...@gmail.com> 
> wrote:
>
> > Hi all,
>
> > We came across a strange behavior. The cliprectof our custom view is
> > getting reset to its entire visible region, if we change the value of
> > another view.
>
> > Below is a sample app to demonstrate the behavior:
>
> > main.xml:
> > <?xml version="1.0" encoding="utf-8"?>
> > <LinearLayout xmlns:android="http://schemas.android.com/apk/res/
> > android"
> >    android:orientation="vertical"
> >    android:layout_width="fill_parent"
> >    android:layout_height="fill_parent"
> >    >
>
> > <com.test.MyView
> >    android:id="@+id/view"
> >    android:layout_width="fill_parent"
> >    android:layout_height="100px" />
>
> > <TextView
> >    android:id="@+id/text"
> >    android:layout_width="fill_parent"
> >    android:layout_height="wrap_content" />
>
> > </LinearLayout>
>
> > ClipTest.java:
> > package com.test;
>
> > import android.app.Activity;
> > import android.os.Bundle;
> > import android.view.KeyEvent;
> > import android.widget.TextView;
>
> > public class ClipTest extends Activity {
> >    /** Called when the activity is first created. */
> >   �...@override
> >    public void onCreate(Bundle savedInstanceState) {
> >        super.onCreate(savedInstanceState);
> >        setContentView(R.layout.main);
> >    }
>
> >   �...@override
> >    public boolean onKeyDown(int keyCode, KeyEvent event) {
> >        TextView tv = (TextView)findViewById(R.id.text);
> >        tv.setText("Test");
>
> >        findViewById(R.id.view).invalidate(100, 0, 150, 75);
> >        return true;
> >    }
> > }
>
> > MyView.java:
> > package com.test;
>
> > import android.content.Context;
> > import android.graphics.Canvas;
> > import android.graphics.Rect;
> > import android.util.AttributeSet;
> > import android.view.View;
>
> > public class MyView extends View {
>
> >    public MyView(Context context) {
> >        super(context);
> >    }
>
> >    public MyView(Context context, AttributeSet attrs) {
> >        super(context, attrs);
> >    }
>
> >    protected void onDraw(Canvas canvas) {
> >        super.onDraw(canvas);
>
> >        Rectclip= canvas.getClipBounds();
> >        System.out.println("clip" +clip);
> >    }
> > }
>
> > If you run the above app, MyView.onDraw() prints "clipRect(0, 0, 320,
> > 100)". If you comment out "tv.setText("Test");", then MyView.onDraw()
> > prints "clipRect(100, 0, 150, 75)".
>
> > Why does setting the TextView's text affect MyView'scliprect? How
> > can we get the correctcliprectin MyView.onDraw()? Thanks for any
> > help!
>
> > Larry
>
> --
> Romain Guy
> Android framework engineer
> romain...@android.com
>
> 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 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