Android触摸事件进行画图简单实现

首先先说两个类:canva与paint;这两个类在·Android中绘图用途非常广;后续还会继续更新关于这两个类的一些用法;

下面先进行一个简单的实现;(这里需要实现的是下面4个按钮,最后把自己画的图存入SD卡)

首先是布局:比较简单(不写布局,直接上图)


现在直接开始写代码:(注释比较详细,利于新手学习)

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //先加载原图
        bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.bg);
        //创建白纸,宽 高,图片的参数
        bitmap1 = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), bitmap.getConfig());
        //创建画板
        canvas = new Canvas(bitmap1);
        //创建画笔
        paint = new Paint();
        //在纸上作画
        canvas.drawBitmap(bitmap,new Matrix(),paint);

        iv= (ImageView) findViewById(R.id.iv);
        ///////////////////////手势识别器和画笔结合的知识/////////////////////////
        //给控件设置手势适配器,可以得到用户在这个控件上所做的手势;
        iv.setOnTouchListener(new View.OnTouchListener() {
            //当用户的手在这个控件时,自动回调
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                switch (motionEvent.getAction()){//获取用户的行动
                    case MotionEvent.ACTION_DOWN://按下时回调
                        Log.d("PY","按下");
                        //获取用户手指按下时的坐标
                        startx = motionEvent.getX();
                        starty = motionEvent.getY();
                        Toast.makeText(MainActivity.this,startx+""+starty,Toast.LENGTH_SHORT).show();
                        break;

                    case MotionEvent.ACTION_MOVE://手指滑动时调用
                        Log.d("PY","正在滑动");
                        newx = motionEvent.getX();
                        newy = motionEvent.getY();
                        //在背景图画线
                        canvas.drawLine(startx,starty,newx,newy,paint);
                        startx=newx;
                        starty=newy;
                        iv.setImageBitmap(bitmap1);
                        break;
                    case MotionEvent.ACTION_UP://松开(抬起)的调用
                        Log.d("PY","松开");
                        break;

                }
           //事件分发机制
                //true:iv处理该触摸事件
                //false:iv不处理触摸事件,事件传递给上一级
                return true;
            }
        });
    }
    //点击改变颜色(红色)
    public void red(View view){
        paint.setColor(Color.RED);
    }
    //点击改变颜色(绿色)
    public void green(View view){
        paint.setColor(Color.GREEN);
    }
    //点击刷子(及变粗)
    public void brush(View view){
        paint.setStrokeWidth(10);

    }
      //点击保存并存储到SD卡中
    public void save(View view){
        canvas.save(Canvas.ALL_SAVE_FLAG);
        String sdpath= Environment.getExternalStorageDirectory()+"/temp.png";
        File file=new File(sdpath);
        try {
            file.createNewFile();
            FileOutputStream fos=new FileOutputStream(file);
            if (bitmap1!=null){
           bitmap1.compress(Bitmap.CompressFormat.PNG,100,fos);

            }
            fos.flush();
            fos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

你可能感兴趣的:(自定义控件)