2012-04-16 4 views
1

Я пытаюсь написать анимированный Drawable на основе класса ShapeDrawable с использованием определенного класса Shape для рисования его содержимого.Android анимированный ShapeDrawable

По требованию необходимо изменить некоторые значения в классе Shape, и его следует изменить из-за этих значений (что-то вроде изменения температуры в каком-либо масштабе). Вся вещь написана для Android 2.1. Я нашел, что звонок invalidateSelf() для моего ShapeDrawable должен быть хорошим, но я должен предоставить Drawable.Callback для этого.

И вопрос в том, что должно быть предусмотрено в invalidateDrawable(Drawable who) метод для интерфейса Drawable.Callback? Некоторые образцы, использующие такой подход:

class MyShapeDrawable extends ShapeDrawable implements Drawable.Callback 
{ 
    public void invalidateDrawable(Drawable who) { 
    } 

    public void scheduleDrawable(Drawable who, Runnable what, long when) { 
    } 

    public void unscheduleDrawable(Drawable who, Runnable what) { 
    } 
} 

Когда я называю invalidateSelf() для моего метода, основанного ShapeDrawable класса invalidateDrawable() называется, но то, что должно быть сделано в этом методе? Как заставить мой Shape обновляться и перерисовываться?

ответ

0

это реализация в андроид источника View.java ...

public void invalidateDrawable(Drawable drawable) { 
    if (verifyDrawable(drawable)) { 
     final Rect dirty = drawable.getBounds(); 
     final int scrollX = mScrollX; 
     final int scrollY = mScrollY; 

     invalidate(dirty.left + scrollX, dirty.top + scrollY, 
       dirty.right + scrollX, dirty.bottom + scrollY); 
    } 
} 
+0

пожалуйста, объясните свой ответ более подробно. –

Смежные вопросы