簡體   English   中英

在自定義視圖中執行路徑動畫

[英]Performing path animation in custom view

因此,我有一個自定義視圖,嘗試使用moveto()和lineto()的Path方法執行繪圖動畫。 我有一組要迭代的點,並在每次迭代時都調用invalidate()。 在onDraw中,路徑是使用drawPath()繪制的。 當然,直到循環完成才調用onDraw。 我相信我需要在后台線程中執行迭代。 但是同時,我讀到在后台線程中執行UI更改是一種不好的做法。 如何在每次迭代中重繪?

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    canvas.drawPaint(mBackgroundPaint);
    canvas.drawPath(mPath, mStrokePaint);
}

public void drawPoints(){

    mPath = new Path();
    for (Stroke stroke : mStrokes){

        mDuration = stroke.getStrokeDuration();
        mInitialX = stroke.getInitialX();
        mInitialY = stroke.getInitialY();
        mPath.moveTo(mInitialX, mInitialY);
        invalidate();

        mPoints = new ArrayList<Point>();
        mPoints = stroke.getStrokePoints();
        int s = mPoints.size();

        long delayTime = mDuration / (long) s;


        for(Point point : mPoints){
            mX = point.getX();
            mY = point.getY();

            handler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    mPath.lineTo(mX, mY);
                    // want to call invalidate to redraw canvas
                    invalidate(); 
                }
            }, delayTime);


        }

    }








}

我有同樣的概率,將其放入您的onDraw中:

((Main) context).runOnUiThread(new Runnable() {
    @Override
    public void run() {
        CustomView.this.invalidate();

    }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM