Reputation: 1
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
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