Анимация раздела onDraw () - PullRequest
0 голосов
/ 30 мая 2011

У меня есть следующий класс:

public class MainActivity extends Activity {
/** Called when the activity is first created. */

String value = "0";

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);

        setContentView(new GaugeAnimation(this));

       }

     }

Мой класс GuageAnimation выглядит следующим образом:

public class GaugeAnimation extends View{

private Path p;
private Paint cPaint = new Paint();
private int width = 200;
private int angleStart = 135;
private int sweep = 90;
private int value=0;

Bitmap bottom = BitmapFactory.decodeResource(getResources(), R.drawable.dashboard_rpm_bottom);
Bitmap top= BitmapFactory.decodeResource(getResources(), R.drawable.dashboard_rpm_active);

public GaugeAnimation(Context context){
    super (context);

        //Arc Equations & etc.... 

}

@Override
public void onDraw(Canvas c){


    Paint paint = new Paint();
    paint.setFilterBitmap(false);
    paint.setColor(Color.BLUE);
    c.translate(55,320);       

    //Draw bottom image on canvas

  c.save();

    p.addArc(new RectF(0,0,width,width), angleStart, sweep);
    p.lineTo(width/2, width/2);


    c.clipPath(p);

    //draw Image on top

    c.restore();

   invalidate()

}


 }

так что в основном это обрезает круглое изображение по одной части за один раз на основе уравнений дуги. Я хочу показать анимацию, например, заполненные части круга (поэтому показываю каждый обтравочный контур, который демонстрирует построенный круг). Так что я думал о том, чтобы сделать цикл вроде:

 for (int i=0; i<100; i++) {
   sweep=i;
   p.addArc(new RectF(0,0,width,width), angleStart, sweep);
    p.lineTo(width/2, width/2);

    c.clipPath(p);
        invalidate();
 }

но это не работает, просто рисует конечный результат, когда я = 100, у кого-нибудь есть идея, как я могу это сделать?

1 Ответ

1 голос
/ 30 мая 2011

В настоящее время ваш цикл выполняется в основном потоке и сохраняет его занятым, поэтому он не будет обновлять пользовательский интерфейс до тех пор, пока вы не закончите.

Вы должны сделать цикл в фоновом потоке (используя Таймер или AsyncTask ) и выполнить рисование в основном потоке. Обратите внимание, что без короткого сна это, вероятно, будет выглядеть слишком много анимации, это будет довольно быстро.

...