блок drawRect выдает андроид - PullRequest
       19

блок drawRect выдает андроид

2 голосов
/ 03 августа 2011

Я пытаюсь отследить ограничивающую Rect для дочернего элемента TextView внутри класса, расширяющего LinearLayout Я использую View.getGlobalVisibleRect(Rect) для того, чтобы получить ограничивающий прямоугольник TextView относительно его родителя. Он отлично работает на некоторых устройствах, но на других телефонах, очевидно, возникает проблема с устройством. Простой пример того, что я вижу:

//Extended LinearLayout's onDraw
protected void onDraw(Canvas canvas){
    super.onDraw(canvas);
    TextView tv = (TextView)findViewById(R.id.textView1);
    Rect bounds = new Rect();
    tv.getGlobalVisibleRect(bounds);
    canvas.drawRect(bounds, myPaint);
}

Ожидается, что он должен нарисовать прямоугольник под телевизором TextView. Это происходит на моем планшете 3.1, но на моих телефонах 1.6 и 2.3 он рисует поле под TextView. Кажется, мне нужно преобразовать значения ограничивающего прямоугольника в другой тип пиксельной единицы, чтобы получить ожидаемые результаты.

Проблема в том, что я не уверен, что возвращенный объект Rect уже в DIP или в стандартных пикселях. Я пытался сделать оба:

bounds.top = TypedValue.complexToDimensionPixelSize(bounds.top, getContext().getResources().getDisplayMetrics());

и

bounds.top = TypedValue.COMPLEX_UNIT_DIP, bounds.top, getContext().getResources().getDisplayMetrics());

Но ни один из них, похоже, не переводит верхнюю часть окна туда, где она должна быть. Буду очень признателен за любые отзывы и советы.

Спасибо!

1 Ответ

1 голос
/ 05 августа 2011

Оказывается, что getGlobalVisibleRect либо не работает до версии 3.0, либо не возвращает то, что я ожидаю. Я обнаружил, что могу сделать это вместо этого.

TextView tv = (TextView)findViewById(R.id.textView1);
Rect bounds = new Rect(tv.getLeft(), tv.getTop(), tv.getRight(), tv.getBottom()); 
...