public class MainActivity extends AppCompatActivity {
private ImageView iv;
private Bitmap bitmap, backGroud; //画纸和背景图
private Canvas canvas; //画布
private Paint paint; //画笔
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv = (ImageView) findViewById(R.id.iv);
iv.setImageResource(R.drawable.bg);
//拿到背景图
backGroud = BitmapFactory.decodeResource(getResources(), R.drawable.bg);
//拿到和背景图一样大小的画纸,获取到的backGroud是一个不可变位图,Canvas创建需要一个可变位图
bitmap = Bitmap.createBitmap(300, 750, backGroud.getConfig());
//Canvas相当于一个画板,bitmap为画布,这段代码将bitmap作为画布放在画板上,
//开始画时,画布会随之变化,也就是说bitmap会变成随之画而改变,在这里创建的Canvas和画布的大小一样
canvas = new Canvas(bitmap);
//拿到画笔
paint = new Paint();
paint.setColor(Color.RED);//设置画笔颜色为黑色
// paint.setStyle(Paint.Style.FILL);//设置画笔为空心
paint.setStrokeWidth(5);
//添加处理规则
Matrix matrix = new Matrix();
//照着背景图画
canvas.drawBitmap(backGroud, matrix, paint);
iv.setOnTouchListener(new View.OnTouchListener() {
float startX;
float startY;
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
//获取按下时的坐标
case MotionEvent.ACTION_DOWN:
startX = event.getX();
startY = event.getY();
break;
//获取移动时的坐标
case MotionEvent.ACTION_MOVE:
//Canvas的宽高与iv的宽高相同且Canvas的绘图坐标系是以左上角为原点,所以iv点击处距离
//iv左上角的距离即为我们要画的距离,直接在两点画线,画完之后,将改变后的画布bitmap
//设置为iv的背景显示
float stopX = event.getX();
float stopY = event.getY();
// 在开始和结束坐标间画一条线
canvas.drawLine(startX, startY, stopX, stopY, paint);
//实时更新坐标(通过不断画线)
startX = event.getX();
startY = event.getY();
iv.setImageBitmap(bitmap);
break;
case MotionEvent.ACTION_UP:
break;
default:
break;
}
return true;
}
});
}
}
Android画画板剖析
最新推荐文章于 2018-09-14 09:48:46 发布