Android 实现简单的画画版一
来源:互联网 发布:游戏作弊神器软件 编辑:程序博客网 时间:2024/04/30 08:14
原理:
1)首先创建一个创建一张空白图片
2)把空白图片设置到imageview控件
3)给imageview设置监听,并返回值true;
代码如下:
/** * @描述 画板 * @项目名称 App_Basic * @包名 com.example.basic.image * @类名 CanvaImage * @author chenlin * @version 1.0 */public class CanvaImageActivty extends BaseActivity implements OnTouchListener, OnClickListener { private Button mBtnView; private ImageView mImageView; private Bitmap mBlankBitmap; private Canvas mCanvas; private Paint mPaint; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_canvas); mBtnView = (Button) findViewById(R.id.btn_view_image); mImageView = (ImageView) findViewById(R.id.iv_canvas); mImageView.setOnTouchListener(this); mBtnView.setOnClickListener(this); createBitmap(); } private void createBitmap() { WindowManager manager = (WindowManager) getSystemService(WINDOW_SERVICE); DisplayMetrics outMetrics = new DisplayMetrics(); manager.getDefaultDisplay().getMetrics(outMetrics); mBtnView.measure(0, 0); int height = outMetrics.heightPixels - mBtnView.getMeasuredHeight(); // 创建一张空白图片 mBlankBitmap = Bitmap.createBitmap(outMetrics.widthPixels, height, Config.ARGB_8888); // 创建一张画布 mCanvas = new Canvas(mBlankBitmap); //画布背景为白色 mCanvas.drawColor(Color.WHITE); //初始化画笔 mPaint = new Paint(); mPaint.setColor(Color.RED); mPaint.setStrokeWidth(3); //绘制白色背景 mCanvas.drawBitmap(mBlankBitmap, new Matrix(), mPaint); mImageView.setImageBitmap(mBlankBitmap); } private int downX; private int downY; @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: // 获取手按下时的坐标 downX = (int) event.getX(); downY = (int) event.getY(); break; case MotionEvent.ACTION_MOVE: // 获取手移动后的坐标 int moveX = (int) event.getX(); int moveY = (int) event.getY(); // 在开始和结束坐标间画一条线 mCanvas.drawLine(downX, downY, moveX, moveY, mPaint); // 实时更新开始坐标 downX = (int) event.getX(); downY = (int) event.getY(); mImageView.setImageBitmap(mBlankBitmap); break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: //mImageView.setImageBitmap(mBlankBitmap); //保存图片到sdcard saveBitmap(mBlankBitmap); break; } return true; } private void saveBitmap(Bitmap bitmap) { try { String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/image/"; File dir = new File(path); if (!dir.exists()) { dir.mkdirs(); } String filename = System.currentTimeMillis() + ".jpg"; FileOutputStream fos = new FileOutputStream(new File(path, filename)); //把保存图片 bitmap.compress(CompressFormat.JPEG, 100, fos); fos.close(); notifyHasMount(); } catch (FileNotFoundException e) { e.printStackTrace(); show("保存失败" + e.getMessage()); } catch (IOException e) { e.printStackTrace(); show("保存失败" + e.getMessage()); } } /** * 模拟一个广播,通知系统sdcard被挂载 * */ private void notifyHasMount() { Intent intent = new Intent(); intent.setAction(Intent.ACTION_MEDIA_MOUNTED); intent.setData(Uri.fromFile(Environment.getExternalStorageDirectory())); sendBroadcast(intent); } /** * 查看图片 */ @Override public void onClick(View v) { if (v == mBtnView) { Intent intent = new Intent(); intent.setAction(Intent.ACTION_PICK); intent.setType("image/*"); startActivity(intent); } }}
布局文件
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ImageView android:id="@+id/iv_canvas" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" /> <Button android:id="@+id/btn_view_image" android:gravity="center" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="查看图片" /></LinearLayout>
0 0
- Android 实现简单的画画版一
- android实现简单的画画板
- Android 自定义控件的画画扳的简单实现
- Android--简单的画画板实例代码
- Canvas实现简单画画板
- android 画画
- ImageView实现画画板的功能
- android画画板
- android 画画板
- Android画画板剖析
- Android 画画板
- Android画画板
- 浅谈下Unity实现像素画画的功能
- Android开发笔记之简易画画板的制作
- flash简单画画actionscript3.0
- 画画的函数_GDI
- 画画的启示
- 画画的函数_GDI
- java MD5 加密
- JAVA设计模式之单例模式:内部静态类
- android tv开发基础知识焦点处理
- [leetcode] 343. Integer Break 解题报告
- Shell编程—根据用户输入来输出符号正方形
- Android 实现简单的画画版一
- Linux Wireless基础知识
- 【SPOJ-RAONE】Ra-One Numbers【数位DP】【记忆化搜索】
- 利用R包ggmap进行空间可视化
- 调整Poker 在Mac、win下通用键位,解决mac的复制粘贴问题
- 推荐几个前端的教程
- 盗梦空间影评
- Memcache安装与入门
- 76、怎样给Myeclipse配置tomcat服务器