Marsh raj
Marsh raj

Reputation: 1

How to set delay in draw line using canvas

am new to android platform and try to draw line with delay for each pixel. But when the execute the code they not delay each pixel they are going to display after full loop executing i don't know why to do like this. i need to some delay each pixel, i mean draw pixel to pixel in live view. it's possible please suggest sample code or example. Thanks advance.

activity

public class MainActivity extends Activity {

ImageView drawingImageView;
int x1 = 50;
int y1 = 100;
int y2 = 100;
int i;

@Override
public 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.GREEN);
    paint.setStrokeWidth(5);
    for (i = 0; i < 250; i++) {
        try {
            Thread.sleep(50);
        } catch (InterruptedException ie) {
            //error;
        }
        canvas.drawLine(x1, y1, x1 + i, y2, paint);
    }
    i++;
}}

Upvotes: 0

Views: 853

Answers (1)

Anshika Bansal
Anshika Bansal

Reputation: 320

Please Go through this.Hope this will work for you. :)

public class TestActivity extends AppCompatActivity {

ImageView drawingImageView;
int x1 = 50;
int y1 = 100;
int y2 = 100;
int x2=50, mCount = 1;
private Handler mHandler;
private Runnable mRunnable;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_test);
    drawingImageView = (ImageView) this.findViewById(R.id.DrawingImageView);
    Bitmap bitmap = Bitmap.createBitmap((int) getWindowManager()
            .getDefaultDisplay().getWidth(), (int) getWindowManager()
            .getDefaultDisplay().getHeight(), Bitmap.Config.ARGB_8888);
    final Canvas canvas = new Canvas(bitmap);
    drawingImageView.setImageBitmap(bitmap);

    final Paint paint = new Paint();
    paint.setColor(Color.GREEN);
    paint.setStrokeWidth(5);

    canvas.drawLine(x1, y1, x2, y2, paint);

    mHandler = new Handler(getMainLooper());
    mRunnable = new Runnable() {
        @Override
        public void run() {
            int x3 = x2 + mCount;
            canvas.drawLine(x2, y1, x3, y2, paint);
            x2 = x3;
            mCount++;
            drawingImageView.invalidate();
            if (mCount < 150)
                mHandler.postDelayed(mRunnable, 50);
        }
    };

    mHandler.postDelayed(mRunnable,50);


}

}

Upvotes: 2

Related Questions