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

来源:互联网 发布:网络打鱼软件 编辑:程序博客网 时间:2024/06/05 11:51

首先先说两个类: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();        }    }}

原创粉丝点击