【问题标题】:Performing path animation in custom view在自定义视图中执行路径动画
【发布时间】:2014-10-20 01:19:56
【问题描述】:

所以我有一个自定义视图,我在其中尝试使用 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);


        }

    }








}

【问题讨论】:

    标签: java android ondraw invalidation


    【解决方案1】:

    我也有同样的问题,把这个放到你的 onDraw 中:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多