300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > Android触摸事件进行画图简单实现

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

时间:2019-10-18 15:01:34

相关推荐

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){press(pressFormat.PNG,100,fos); }fos.flush(); fos.close(); } catch (IOException e) {e.printStackTrace(); }}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。