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 clip rect of 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);
>
>        Rect clip = canvas.getClipBounds();
>        System.out.println("clip " + clip);
>    }
> }
>
> If you run the above app, MyView.onDraw() prints "clip Rect(0, 0, 320,
> 100)". If you comment out "tv.setText("Test");", then MyView.onDraw()
> prints "clip Rect(100, 0, 150, 75)".
>
> Why does setting the TextView's text affect MyView's clip rect? How
> can we get the correct clip rect in 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