
其实画画板的原理很简单,就是首先记录下按下屏幕的点,然后每移动一下就让这两次移动的点连线,周而复始,图像就由很多条直线构成了。
核心代码 :
public class MainActivity extends Activity implements OnClickListener,OnSeekBarChangeListener {private View red_view,green_view,blue_view; //控制画笔颜色的三块区域private SeekBar seekBar;//控制画笔粗细的拖动条private ImageView iv;private Bitmap bitmap,backgroud;//画纸和背景图private Canvas canvas; //画布private Paint paint;//画笔@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);red_view = findViewById(R.id.red_view);green_view = findViewById(R.id.green_view);blue_view = findViewById(R.id.blue_view);seekBar = (SeekBar) findViewById(R.id.seekbar);iv = (ImageView) findViewById(R.id.iv);iv.setImageResource(R.drawable.bg);//拿到背景图backgroud = BitmapFactory.decodeResource(getResources(), R.drawable.bg);//拿到和背景图一样大小的画纸bitmap = Bitmap.createBitmap(backgroud.getWidth(), backgroud.getHeight(), backgroud.getConfig());//把画纸固定在画布上canvas = new Canvas(bitmap);//拿到画笔paint = new Paint();paint.setColor(Color.BLACK);//设置画笔颜色为黑色paint.setStyle(Style.STROKE);//设置画笔为空心//添加处理规则Matrix matrix = new Matrix();//照着背景图画canvas.drawBitmap(backgroud, matrix, paint);red_view.setOnClickListener(this);green_view.setOnClickListener(this);blue_view.setOnClickListener(this);seekBar.setOnSeekBarChangeListener(this);iv.setOnTouchListener(new OnTouchListener() {float startX;float startY;@Overridepublic boolean onTouch(View v, MotionEvent event) {switch (event.getAction()) {//获取按下时的坐标case MotionEvent.ACTION_DOWN:startX = event.getX();startY = event.getY();break;//获取移动时的坐标case MotionEvent.ACTION_MOVE: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;}});}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.red_view://当点击红色区域的时候设置画笔颜色为红色paint.setColor(Color.RED);break;case R.id.green_view://当点击绿色区域的时候设置画笔颜色为绿色paint.setColor(Color.GREEN);break;case R.id.blue_view://当点击蓝色区域的时候设置画笔颜色为蓝色paint.setColor(Color.BLUE);break;default:break;}}//拖动条的值改变的时候调用@Overridepublic void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) {}//开始拖动时调用@Overridepublic void onStartTrackingTouch(SeekBar seekBar) {}//停止拖动时调用@Overridepublic void onStopTrackingTouch(SeekBar seekBar) {int progress = seekBar.getProgress();//拖动条默认的最大值为100paint.setStrokeWidth(progress/10f);//控制画笔的粗细范围(0-10)}}试试觉得很简单呢,赶紧试试吧!