2011-08-20 237 views
3

我在這種情況下,我想繪製線條與一段時間的一段時間。我試圖通過使用thread.but而不是它爲我工作。 目標是我有5行。線應該繪製一個接一個,延遲5秒。在onDraw()方法中使用Thread.sleep(5000),但所有線在5秒後繪製,這些線沒有周期性繪製...我怎樣才能定期繪製線...繪製直線的線條

代碼段::

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類::

 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); 
    } 
}    

感謝。

回答

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++; 
      } 

     } 
    } 
} 
+0

謝謝噸......它的工作.... – Taruni

+0

尼斯一個不錯的。 –

0

似乎你需要使用runnable,並且在runnable中必須使canvas視圖無效,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); 
     } 
    }; 
4

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是您查看,touchpaint是您的油漆& Main.this是你的活動

+0

感謝yaar我會檢查出來... – Taruni

+0

這是不工作... runOnUiThread()不recoginsing ... – Taruni

+0

它必須努力我檢查 –