2016-03-28 22 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

相关问题