首页 > 系统 > Android > 正文

Android多媒体之画画板开发案例分享

2019-12-12 06:22:27
字体:
来源:转载
供稿:网友

先看看效果:

其实画画板的原理很简单,就是首先记录下按下屏幕的点,然后每移动一下就让这两次移动的点连线,周而复始,图像就由很多条直线构成了。

核心代码 :

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;        //画笔  @Override  protected 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;      @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:          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;      }    });  }  @Override  public 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;    }  }  //拖动条的值改变的时候调用  @Override  public void onProgressChanged(SeekBar seekBar, int progress,      boolean fromUser) {  }  //开始拖动时调用  @Override  public void onStartTrackingTouch(SeekBar seekBar) {  }  //停止拖动时调用  @Override  public void onStopTrackingTouch(SeekBar seekBar) {    int progress = seekBar.getProgress();//拖动条默认的最大值为100    paint.setStrokeWidth(progress/10f);//控制画笔的粗细范围(0-10)  }}

试试觉得很简单呢,赶紧试试吧!

又到周五了,希望大家有个快乐周末,谢谢大家一直对小编的支持,小编一定会再接再厉,为大家分享更多精彩的文章。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表