美文网首页
画画板功能实现

画画板功能实现

作者: 萱生活 | 来源:发表于2016-12-10 02:28 被阅读0次

    1 获取一张背景图片 BitmpFactory.decodeResource

    2 创建一个副本

    3 设置imageview的onTouch事件 判断事件的类型, 根据事件的 类型获取 开始和结束的位置 划线 重新设置给imagevie

    4 获取imageview被操作的事件类型 event.getAction

    5 鼠标按下 抬起 移动操作

    6 将图片保存至图库

    public classMainActivityextendsAppCompatActivityimplementsView.OnClickListener{

    privateBitmapbitmap_copy;//原图 副本

    private  floatstartX;

    private  floatstartY;

    privatePaintpaint;

    @Override

    protected voidonCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    initView();

    }

    private voidinitView() {

    findViewById(R.id.bt_save).setOnClickListener(this);

    findViewById(R.id.bt_strong).setOnClickListener(this);

    findViewById(R.id.bt_white).setOnClickListener(this);

    finalImageView iv_imageview = (ImageView) findViewById(R.id.iv_imageview);

    //将图片资源文件 转化成bitmap

    Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.mipmap.bg1);//原图

    //将原图cope一份作为 作画的 白纸

    bitmap_copy= bitmap.createBitmap(bitmap.getWidth(),bitmap.getHeight(),bitmap.getConfig());

    //创建画笔

    paint=newPaint();

    paint.setColor(Color.RED);

    //创建画板 将白纸铺到 画板上

    finalCanvas canvas =newCanvas(bitmap_copy);

    //将 原图 画在画板上

    canvas.drawBitmap(bitmap,newMatrix(),paint);

    //将图片的副本 设置给imageview、

    iv_imageview.setImageBitmap(bitmap_copy);

    //设置imageview的ontouchevent时间

    iv_imageview.setOnTouchListener(newView.OnTouchListener() {

    @Override

    public booleanonTouch(View v,MotionEvent event) {

    switch(event.getAction()){

    caseMotionEvent.ACTION_DOWN://按下

    //获取按下时的x,y轴

    startX= event.getX();

    startY= event.getY();

    break;

    caseMotionEvent.ACTION_UP://抬起

    break;

    caseMotionEvent.ACTION_MOVE://移动

    //获取移动后的x,y轴

    floatstopX = event.getX();

    floatstopY = event.getY();

    for(inti =0;i<3;i++){

    canvas.drawLine(startX+i,startY+i,stopX+i,stopY+i,paint);

    }

    //将结束的 位置 赋值 给开始的位置

    startX= stopX;

    startY= stopY;

    iv_imageview.setImageBitmap(bitmap_copy);

    break;

    }

    //返回false代表 上一个 事件未消耗不能执行事件  例如:返回false时  只能执行按下事件  返回true时则 可以执行下面的事件

    return true;

    }

    });

    }

    @Override

    public voidonClick(View v) {

    switch(v.getId()){

    caseR.id.bt_save://保存

    saveImageToGallery(this,bitmap_copy);

    break;

    caseR.id.bt_strong://加粗

    paint.setStrokeWidth(15);

    break;

    caseR.id.bt_white://白色

    paint.setColor(Color.WHITE);

    break;

    }

    }

    public  voidsaveImageToGallery(Context context,Bitmap bmp) {

    if(bmp ==null){

    Toast.makeText(this,"保存出错了",Toast.LENGTH_LONG).show();

    return;

    }

    //首先保存图片

    File appDir =newFile(Environment.getExternalStorageDirectory(),"lishuai");

    if(!appDir.exists()) {

    appDir.mkdir();

    }

    String fileName = System.currentTimeMillis() +".jpg";

    File file =newFile(appDir,fileName);

    try{

    FileOutputStream fos =newFileOutputStream(file);

    bmp.compress(Bitmap.CompressFormat.JPEG,100,fos);

    fos.flush();

    fos.close();

    }catch(FileNotFoundException e) {

    Toast.makeText(this,"文件未发现",Toast.LENGTH_LONG).show();

    e.printStackTrace();

    }catch(IOException e) {

    Toast.makeText(this,"保存出错了",Toast.LENGTH_LONG).show();

    e.printStackTrace();

    }catch(Exception e){

    Toast.makeText(this,"保存出错了",Toast.LENGTH_LONG).show();

    e.printStackTrace();

    }

    //最后通知图库更新

    try{

    MediaStore.Images.Media.insertImage(context.getContentResolver(),file.getAbsolutePath(),fileName, null);

    }catch(FileNotFoundException e) {

    e.printStackTrace();

    }

    Intent intent =newIntent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);

    Uri uri = Uri.fromFile(file);

    intent.setData(uri);

    context.sendBroadcast(intent);

    Toast.makeText(this,"保存成功了",Toast.LENGTH_LONG).show();

    }

    }

    相关文章

      网友评论

          本文标题:画画板功能实现

          本文链接:https://www.haomeiwen.com/subject/emvymttx.html