定期绘制线条

时间:2011-08-20 09:23:30

标签: android paint lines

我处于一种情况,我想在一段时间内逐一画线。我试图通过使用thread来做到这一点。但它对我没用。 目标是我有5行。这些行应该一个接一个地绘制,延迟时间为5秒。在onDraw()方法中使用Thread.sleep(5000),但是在5秒后绘制了所有行,这些行不是定期绘制的......我怎样才能定期绘制线... < / p>

code snippet ::

  public class PaintDemoActivity extends Activity {
DragView drawView;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
    requestWindowFeature(Window.FEATURE_NO_TITLE);

    drawView = new DragView(this);
    setContentView(drawView);
    drawView.requestFocus();
}

}

DragView Class ::

     public class DragView extends View implements OnTouchListener {
     Paint paint = new Paint();
     public DragView(Context context) {
    super(context);
    setFocusable(true);
    setFocusableInTouchMode(true);

    this.setOnTouchListener(this);

    paint.setColor(Color.GREEN);
    paint.setStyle(Paint.Style.FILL);
    //paint.setStyle(Style.STROKE);
    paint.setAntiAlias(true);
}
   @Override
public void onDraw(final Canvas mCanvas) {  
    canvas.drawCircle(p.x, p.y, 5, paint);
    canvas.drawLine(60, 60, 120,60, paint);
    canvas.drawLine(60, 60, 60, 120, paint);
    canvas.drawLine(60, 120, 120, 120, paint);
    canvas.drawLine(120, 120, 120, 180, paint);
    canvas.drawLine(120, 180, 60, 180, paint);
    }
 }               

感谢。

3 个答案:

答案 0 :(得分:7)

另一种方式,更通用:

public class LinesActivity extends Activity {
    DemoView demoview;
    int mCount = 0;
    int mListSize = 0;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Paint paint = new Paint();
        paint.setColor(Color.RED);

        List<Coords> coordList = new ArrayList<Coords>();
        // Load up the coordinates
        coordList.add(new Coords(60, 60, 120, 60));
        coordList.add(new Coords(60, 60, 60, 120));
        coordList.add(new Coords(60, 120, 120, 120));
        coordList.add(new Coords(120, 120, 120, 180));
        coordList.add(new Coords(120, 180, 60, 180));
        mListSize = coordList.size();
        demoview = new DemoView(this, paint, coordList);
        setContentView(demoview);
        Timer timer = new Timer();

        timer.schedule(new TimerTask() {
            public void run() {
                mCount++;
                demoview.postInvalidate();
                Log.d("LINES", "Timer triggered");
                if (mCount >= mListSize) {
                    Log.d("LINES", "All done, cancelling timer");
                    cancel();
                }
            }
        }, 5000, 5000);

    }

    private class Coords {
        // little class to hold the coordinates
        float mSx; float mSy; float mEx; float mEy;

        public Coords(float sx, float sy, float ex, float ey) {
            mSx = sx;   mSy = sy; // start/end x/y
            mEx = ex;   mEy = ey;
        }
    }

    private class DemoView extends View {

        Paint mPaint;
        List<Coords> mcList;

        public DemoView(Context context, Paint paint, List<Coords> cList) {
            super(context);
            mPaint = paint;
            mcList = cList;
        }
        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
            int count = 0;
            Log.d("LINES", "mcount" + mCount);
            for (Coords c : mcList) { // draw all the lines
                if (count >= mCount)
                    break; // up to the number in mCount
                canvas.drawLine(c.mSx, c.mSy, c.mEx, c.mEy, mPaint);
                count++;
            }

        }
    }
}

答案 1 :(得分:3)

Ammu

试试这段代码

final Thread thread = new Thread(new Runnable() 
                           {
                                @Override
                                public void run() 
                                {
                                    synchronized (this)
                                    {

                                        try {
                                            wait(500);
                                            Main.this.runOnUiThread(new Runnable() {@Override public void run()
                                            {
                                                mCanvas.drawLine(60, 60, 120,60, touchPaint);
                                                v.invalidate();
                                            }});

                                            wait(500);
                                            Main.this.runOnUiThread(new Runnable() {@Override public void run()
                                            {
                                                mCanvas.drawLine(60, 60, 60, 120, touchPaint);
                                                v.invalidate();
                                            }});
                                            wait(500);
                                            Main.this.runOnUiThread(new Runnable() {@Override public void run()
                                            {
                                                mCanvas.drawLine(60, 120, 120, 120, touchPaint);
                                                v.invalidate();
                                            }});
                                            wait(500);
                                            Main.this.runOnUiThread(new Runnable() {@Override public void run()
                                            {
                                                mCanvas.drawLine(120, 120, 120, 180, touchPaint);
                                                v.invalidate();
                                            }});
                                            wait(500);
                                            Main.this.runOnUiThread(new Runnable() {@Override public void run()
                                            {
                                                mCanvas.drawLine(120, 180, 60, 180, touchPaint);
                                                v.invalidate();
                                            }});
                                        } catch (Exception e) {
                                            // TODO Auto-generated catch block
                                            e.printStackTrace();
                                        }

                                    }

                                }
                            });
                           thread.start();

其中mCanvas是你的画布,v是你的View,touchpaint是你的Paint&amp; Main.this是您的活动

答案 2 :(得分:0)

似乎你需要使用runnable并且在runnable中你必须使画布视图无效,ypur代码就好像。

handler.post(runnable);
int i = 0;
Runnable runnable = new Runnable() {
        @Override
        public void run() {

                             i++;
     switch(i){
     // do whatever yo want to do ..
        } 
                                layoutObj.removeView(your canvas View); 
                                layoutObj.addView(your canvas View);

                handler.removeCallbacks(runnable);
                handler.postDelayed(runnable, 5000L);
        }
    };