andorid画画板
来源:互联网 发布:打字软件下载 编辑:程序博客网 时间:2024/06/02 17:08
package com.lyz.news.day32draw;import android.app.Activity;import android.content.Intent;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Matrix;import android.graphics.Paint;import android.net.Uri;import android.os.Bundle;import android.os.Environment;import android.util.Log;import android.view.MotionEvent;import android.view.View;import android.widget.ImageView;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;public class MainActivity extends Activity { // 我要必须滴知道手指触摸的坐标 private ImageView miv; private int startx; private int starty; private Canvas canvas; private Bitmap copybp; private Paint paint; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);// 因为这个图片在drawable里所以这里我们就不能用decodeFile,抵用获取资源的// 加载画板的背景图 Bitmap srcbp = BitmapFactory.decodeResource(getResources(), R.drawable.bg); //创建副本 新的画板 copybp = Bitmap.createBitmap(srcbp.getWidth(), srcbp.getHeight(), srcbp.getConfig()); //2.创建画笔 paint = new Paint(); //创建画布 //3创建画板来画画,把白纸放上 canvas = new Canvas(copybp); //绘制 canvas.drawBitmap(copybp, new Matrix(), paint);// Matrix matrix=new Matrix();// miv = (ImageView) findViewById(R.id.miv); //把我们的副本 给塞到imageview里,初始必须滴有一个画画板 miv.setImageBitmap(copybp); //触摸监听能知道你触摸的坐标 miv.setOnTouchListener(new View.OnTouchListener() {// 用户触摸屏幕时调用,或是事件产生// MotionEvent动作事件,谁触发这个方法这个View就是谁,哪个组件触摸他就是谁 /** * * @param v 谁触发这个方法这个View就是谁,哪个组件触摸他就是谁 * @param event 触摸事件有3种,1触摸按住没松开,2滑动,3触摸一下就松开了 * @return */ @Override public boolean onTouch(View v, MotionEvent event) {// 获取当前用户的动作是什么,他是int整型 int action = event.getAction(); switch (action) { case MotionEvent.ACTION_UP://触摸松开 /** * 为什么这up里只有一个坐标数 * 我先拿到第一次点下去的坐标x,y */// startx = (int) event.getX();// starty = (int) event.getY();////// Log.i(xup+"MainActivity", "触摸松开!!!!!!"+yup); break; case MotionEvent.ACTION_DOWN://触摸按下 startx = (int) event.getX(); starty = (int) event.getY();// Log.i("MainActivity", "触摸按了!!!"); break; case MotionEvent.ACTION_MOVE://触摸移动 /** * 再拿到用户触摸移动的坐标x,y * 用up的坐标和新的x,y之间画一条线canvas.drawLin */ int x = (int) event.getX(); int y = (int) event.getY(); canvas.drawLine(startx, starty, x, y, paint);// 作为下一次绘制线的初始坐标,每次绘制线的结束坐标,作为下一次绘制的开始坐标; startx = x; starty = y;// 绘制完之后从新设置到imagev里,你会绘制完了,界面自己是不会刷新的;手动从新设置 miv.setImageBitmap(copybp);// Log.i(y+"MainActivity", "触摸移动!!!"+x); break; }// 这里要是true:就是告诉编译器触摸事件我自己来处理,// false:就会只有触摸一下事件,没有松开和移动,交给了系统来处理,会把触摸事件传递给Imageview的父节点 /** * 你在imageview上移动时,会在两个组件上移动一个是imageview和RelativeLayout,如果false会让RelativeLayout来处理,要是 * RelativeLayout的触摸事件也是false那再次向上传递,如果没有了(视频说没有了)就会丢弃了,没人处理了; * 最后记住:谁给true谁处理触摸监听,给false都不处理 */ return true; } }); } public void red(View v) {// 把画笔设置为红色 paint.setColor(Color.RED); } public void green(View v) {// 把画笔设置为绿色 paint.setColor(Color.GREEN); } public void brush(View v) {//设置画笔的宽度 paint.setStrokeWidth(7); }// 这里为什么必须要传进来一个视图,可能没视图怎么操作; /** * 保存画好的图片 * * @param v */ public void save(View v) {// 保存的位置,输出流, File file = new File("sdcard/lyz.png");// 自己设置一个,把file地址给塞进文件输出流 FileOutputStream fos = null; try { fos = new FileOutputStream(file); } catch (Exception e) { e.printStackTrace(); }/** * compress设置压缩格式, 每次启动系统会把多媒体东西包括图片和音乐播放器和视频播放器,存到一个叫Media的数据库, 拿文件,所以我们必须把让系统扫描一下sd,才会在图片库里显示 */ copybp.compress(Bitmap.CompressFormat.PNG, 100, fos); //我们还发送一个广播让,sd遍历一下好让图片在sd卡能显示到图片库软件上。 //发送sd卡就绪广播 Intent intent = new Intent(); //设置系统的一个条安装MEDIA_这个位置的广播 intent.setAction(intent.ACTION_MEDIA_MOUNTED);// 必须规定data要不无法接收;getExternalStorageDirectory返回一个FILE对象SD卡的真实路径// Environment 提供访问环境变量。 intent.setData(Uri.fromFile(Environment.getExternalStorageDirectory())); sendBroadcast(intent); try { fos.flush(); fos.close(); } catch (IOException e) { e.printStackTrace(); } //这里为什么空指针 }}
0 0
- andorid画画板
- 画画板
- 画画板
- 画画板
- android画画板
- 图片画画板
- 图片画画板
- iOS 画画板
- iOS_24_画画板(含取色板)
- android 画画板
- 画画板原理
- 图片画画板
- Android画画板剖析
- android_65_简易画画板
- Android 画画板
- 画画板案例
- Android画画板
- 画画
- doGet()和doPost()各自的功能以及它们的关系
- 个人的C语言学习——运算符
- String.getBytes() 与编码格式
- 单个对象的内存管理 内存泄露
- 笔记oracle之视图基本操作
- andorid画画板
- Spring MVC架构原理
- 关于Unity3D的编辑器崩溃时的线索定位
- QtQuick学习笔记(三)组件
- Linuxshell脚本之if条件判断
- android 画画
- POJ 1904 King's Quest(强连通分量+匹配)
- 欢迎使用CSDN-markdown编辑器
- 怎么知道属性表的field的fieldtype