2016-03-28 54 views
1

我有繪製線的示例代碼。我需要逐點繪製線條來繪製運行時間。但是現在我在執行後只顯示活動。但是,我需要開始活動並逐點顯示線條。如何在運行時一步一步地在活動中繪製線位圖

示例代碼

public class MainActivity extends ActionBarActivity { 

ImageView drawingImageView; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    drawingImageView = (ImageView) this.findViewById(R.id.DrawingImageView); 
    Bitmap bitmap = Bitmap.createBitmap((int) getWindowManager() 
      .getDefaultDisplay().getWidth(), (int) getWindowManager() 
      .getDefaultDisplay().getHeight(), Bitmap.Config.ARGB_8888); 
    Canvas canvas = new Canvas(bitmap); 
    drawingImageView.setImageBitmap(bitmap); 

    // Line 
    Paint paint = new Paint(); 
    paint.setColor(Color.rgb(255, 153, 51)); 
    paint.setStrokeWidth(10); 
    int startx = 50; 
    int starty = 90; 
    int endx = 350; 
    int endy = 90; 
    while(endx>=startx) { 
     try { 
      Thread.sleep(5); 
     }catch (InterruptedException e){ 
      e.printStackTrace(); 
     } 
     canvas.drawLine(startx, starty, startx+1, endy, paint); 
     startx++; 
    } 
}} 

XML

<?xml version="1.0" encoding="utf-8"?> 

<ImageView android:id="@+id/DrawingImageView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 

回答

0

使用下面的代碼重新啓動動畫,當它達到endx位置 -

private void ImgAnimation() { 

     mHandlerAnimation = new Handler(); 

     mRunnableAnimation = new Runnable() { 
      public void run() { 

        if(endx>startx) 
        { 
         canvas.drawLine(startx, starty, startx+1, endy, paint); 
         startx = startx + 1; 
         getWindow().getDecorView().findViewById(android.R.id.content).invalidate(); 
        } 
        else 
        { 
         bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); 
         canvas = new Canvas(bitmap); 
         drawingImageView.setImageBitmap(bitmap); 
         startx = 50; 
        } 


       mHandlerAnimation.postDelayed(this, 80); 
      } 
     }; 

     mHandlerAnimation.postDelayed(mRunnableAnimation, 80); 

    } 
+0

歡迎您:-) –

1

我覺得行就你的觀點,但添加的UI不是這麼清爽下方添加行了Thread.sleep(5)後刷新UI

getWindow().getDecorView().findViewById(android.R.id.content).invalidate(); 

或者您可以使用下面的代碼 -

public class ImgDraw extends Activity { 

    ImageView drawingImageView; 
    Handler mHandlerAnimation = null; 
    Runnable mRunnableAnimation = null; 
    Canvas canvas ; 
    int startx = 0,starty =0,endx = 0,endy = 0; 
    Paint paint; 
    Bitmap bitmap ; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_imgdraw); 

     drawingImageView = (ImageView)findViewById(R.id.DrawingImageView); 

      DisplayMetrics metrics = new DisplayMetrics(); 
      getWindowManager().getDefaultDisplay().getMetrics(metrics); 
      int width = metrics.widthPixels; 
      int height = metrics.heightPixels; 

      bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); 

      canvas = new Canvas(bitmap); 
      drawingImageView.setImageBitmap(bitmap); 

      // Line 
      paint = new Paint(); 
      paint.setColor(Color.rgb(255, 153, 51)); 
      paint.setStrokeWidth(10); 
      startx = 50; 
      starty = 90; 
      endx = 350; 
      endy = 90;   

      // canvas.drawLine(startx, starty, startx+1, endy, paint); 


       ImgAnimation(); 


    } 

    private void ImgAnimation() { 

     mHandlerAnimation = new Handler(); 

     mRunnableAnimation = new Runnable() { 
      public void run() { 

        if(endx>=startx) { 
         canvas.drawLine(startx, starty, startx+1, endy, paint); 
          startx = startx + 10; 
          getWindow().getDecorView().findViewById(android.R.id.content).invalidate(); 
        } 


       mHandlerAnimation.postDelayed(this, 80); 
      } 
     }; 

     mHandlerAnimation.postDelayed(mRunnableAnimation, 80); 

    } 



} 
+0

如何更改if語句while while循環。如果我改變,而沒有響應應用程序 – wingsraam

+0

如果你改變while while循環,那麼它會直接顯示你的行,顯示在你的代碼中。 while循環由if + handler.postDelayed(this,80)覆蓋; –

+0

當startx等於endx時。自動startx到達開始位置 – wingsraam

相關問題