Android简易实战教程--第二十四话《画画板》
来源:互联网 发布:淘宝banner图 编辑:程序博客网 时间:2024/04/30 04:56
今天完成一个画画板。
首先来个布局:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <ImageView android:id="@+id/iv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /><LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_alignParentBottom="true" > <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="红色" android:onClick="red" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="绿色" android:onClick="green" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="刷子" android:onClick="brush" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="保存" android:onClick="save" /></LinearLayout></RelativeLayout>
可见,要分红绿色,而且还要保存最后画的图片。
看一下主活动代码:
package com.itydl.paintban;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import android.net.Uri;import android.os.Bundle;import android.os.Environment;import android.app.Activity;import android.content.Intent;import android.graphics.Bitmap;import android.graphics.Bitmap.CompressFormat;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Matrix;import android.graphics.Paint;import android.view.Menu;import android.view.MotionEvent;import android.view.View;import android.view.View.OnTouchListener;import android.widget.ImageView;public class MainActivity extends Activity {private ImageView iv;int startX;int startY;private Canvas canvas;private Paint paint;private Bitmap bmCopy;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//加载画画板的背景图Bitmap bmSrc = BitmapFactory.decodeResource(getResources(), R.drawable.bg);bmCopy = Bitmap.createBitmap(bmSrc.getWidth(), bmSrc.getHeight(), bmSrc.getConfig());paint = new Paint();canvas = new Canvas(bmCopy);//绘制canvas.drawBitmap(bmSrc, new Matrix(), paint);iv = (ImageView) findViewById(R.id.iv);iv.setImageBitmap(bmCopy);//设置触摸侦听iv.setOnTouchListener(new OnTouchListener() {//触摸屏幕时,触摸事件产生时,此方法调用@Overridepublic boolean onTouch(View v, MotionEvent event) {int action = event.getAction();switch (action) {//用户手指摸到屏幕case MotionEvent.ACTION_DOWN:startX = (int) event.getX();startY = (int) event.getY();break;//用户手指正在滑动case MotionEvent.ACTION_MOVE:int x = (int) event.getX();int y = (int) event.getY();canvas.drawLine(startX, startY, x, y, paint);//每次绘制完毕之后,本次绘制的结束坐标变成下一次绘制的初始坐标startX = x;startY = y;iv.setImageBitmap(bmCopy);break;//用户手指离开屏幕case MotionEvent.ACTION_UP:break;}//true:告诉系统,这个触摸事件由我来处理//false:告诉系统,这个触摸事件我不处理,这时系统会把触摸事件传递给imageview的父节点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);}public void save(View v){File file = new File("sdcard/dazuo.png");FileOutputStream fos = null;try {fos = new FileOutputStream(file);} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}bmCopy.compress(CompressFormat.PNG, 100, fos);//发送sd卡就绪广播Intent intent = new Intent();intent.setAction(Intent.ACTION_MEDIA_MOUNTED);intent.setData(Uri.fromFile(Environment.getExternalStorageDirectory()));sendBroadcast(intent);}}
运行看一下结果:
画了个绿帽子,哈哈。欢迎关注本博客点击打开链接 http://blog.csdn.net/qq_32059827,每天花上5分钟,阅读一篇有趣的安卓小文哦。
0 0
- Android简易实战教程--第二十四话《画画板》
- Android简易实战教程--第五十四话《视差特效》
- Android实战简易教程-第二十四枪(基于Baas的用户表查询功能实现!)
- Android简易实战教程--第二十八话《加载大图片》
- Android简易实战教程--第二十九话《创建图片副本》
- Android简易实战教程--第三十四话《 自定义SeekBar以及里面的一些小知识》
- android_65_简易画画板
- Android简易实战教程--第二十五话《网络图片查看器》
- Android简易实战教程--第二十六话《网络图片查看器在本地缓存》
- Android简易实战教程--第二十七话《自定义View入门案例之开关按钮详细分析》
- Android简易实战教程--第四十话《Spinner》
- Android实战简易教程-第三十四枪(基于ViewPager和FragmentPagerAdapter实现滑动通用Tab)
- Android实战简易教程-第四十四枪(Ripple Effect-为控件增加涟漪效果)
- Android实战简易教程-第五十四枪(通过实现OnScrollListener接口实现下拉刷新功能)
- Android实战简易教程<十四>(介绍SwipeMenuListView-简单实现类似QQ的滑动删除效果)
- Android实战简易教程<二十四>(基于Baas的用户表查询功能实现!)
- Android实战简易教程-第七十四枪(Intent之间传递图片)
- Android开发笔记之简易画画板的制作
- 编程问题反馈/提问原则:
- H264—帧,片,参数集,NALU等概念
- 工作第八周:转正啦哈哈!顺便立些 flag
- 树链剖分
- Triangle
- Android简易实战教程--第二十四话《画画板》
- linux添加定时任务
- HTML5-CSS3
- NAT ALG原理与应用
- 关于Oracle orion存储性能测试工具
- JSP自定义标签
- 关于C++类中静态函数无法直接访问非静态成员的理解
- 最长子串
- Android四大组件之ContentProvider获取系统的联系人及联系人电话