Android 画画板(OnTouchListener 应用)

【1】布局:

【2】 代码实现:

流程:

A,因为原图无法被修改所以我们需要创建一个副本,把副本添加到Imageview 上

B,给ImageView 设置setOnTouchListener监听  按下,抬起,移动。

C,设置画笔颜色,字体

D,保存在内存卡里。

@Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        // [1]找到iv 用来展示我们画的内容

        iv = (ImageView) findViewById(R.id.iv);



        // [2]先获取bg.png的原图

        srcBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.bg);



        copyBimap = Bitmap.createBitmap(srcBitmap.getWidth(),

                srcBitmap.getHeight(), srcBitmap.getConfig());

        // [3.1]创建画笔类

        paint = new Paint();

        // [3.2]创建一个画布类 相当于把白纸铺到了画布上

        canvas = new Canvas(copyBimap);

        // [3.3]开始作画 当32行代码执行完毕后 白纸上就有内容了

        canvas.drawBitmap(srcBitmap, new Matrix(), paint);

        // [3.4]画一条线 线由2个点确定一条线

        // canvas.drawLine(20, 30, 40, 70, paint);

        // [4]把质的内容展示到iv上

        iv.setImageBitmap(copyBimap);

        // [5]给iv设置触摸事件

        iv.setOnTouchListener(new OnTouchListener() {

            float startX = 0;

            float startY = 0;



            @Override

            public boolean onTouch(View v, MotionEvent event) {

                // [6]具体判断一下触摸事件的类型

                int action = event.getAction();

                switch (action) {

                case MotionEvent.ACTION_DOWN: // 按下

                    // [7]获取手指按下的坐标

                    startX = event.getX();

                    startY = event.getY();

                    System.out.println("按下:" + startX + "~~~~" + startY);

                    break;

                case MotionEvent.ACTION_MOVE: // 移动

                    // [8]获取移动后的坐标

                    float stopX = event.getX();

                    float stopY = event.getY();

                    // [9]不停的画线

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

                    System.out.println("移动:" + stopX + "~~~~" + stopY);

                    // [10]更新iv

                    iv.setImageBitmap(copyBimap);

                    // [11]更新一下开始的坐标 startX startY

                    startX = stopX;

                    startY = stopY;



                    break;



                case MotionEvent.ACTION_UP: // 抬起



                    break;

                }



                // 如果返回值是true 当前监听器对象会消费掉

                return true;

            }

        });



    }



    // 点击按钮让画笔变红色

    public void click1(View v) {

        paint.setColor(Color.RED);

    }



    // 点击按钮让画笔加粗

    public void click2(View v) {

        paint.setStrokeWidth(19);

    }

    

    //点击按钮保存 大作

    public void click3(View v) {

        try {

            File file = new File(Environment.getExternalStorageDirectory().getPath(),"dazuo.png");

            FileOutputStream fos = new FileOutputStream(file);

            //参1:保存图片的格式   参数2:quality 质量

        copyBimap.compress(CompressFormat.PNG, 100, fos);

            fos.close();

            Toast.makeText(getApplicationContext(), "sucess", 1).show();

        } catch (Exception e) {

            e.printStackTrace();

        }

    }



}





猜你喜欢

转载自blog.csdn.net/Cricket_7/article/details/84975578