layout:

<LinearLayout 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:orientation="vertical"
tools:context="com.example.paint.MainActivity" > <Button
android:onClick="save"
android:id="@+id/btn"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="保存" />
<Button
android:onClick="selectImage"
android:id="@+id/select"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="选择一个图片" /> <ImageView
android:layout_above="@id/select"
android:id="@+id/iv"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
</LinearLayout>

main_activity

package com.example.paint;

import java.io.File;
import java.io.FileOutputStream; import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.support.v7.app.ActionBarActivity;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageView;
import android.widget.Toast; public class MainActivity extends ActionBarActivity { private ImageView iv; private Bitmap baseBitmap; private Canvas canvas; //画布 private Paint paint; //画笔 @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); paint = new Paint();
//画笔宽度
paint.setStrokeWidth(5);
//画笔颜色
paint.setColor(Color.GREEN); //创建一个可以修改的bitmap
baseBitmap = Bitmap.createBitmap(320, 350, Config.ARGB_8888);
//创建一个画布
canvas = new Canvas(baseBitmap);
//设置背景色
canvas.drawColor(Color.WHITE); iv = (ImageView)findViewById(R.id.iv); //知道用户手指在平美国上移动的轨迹
iv.setOnTouchListener(new OnTouchListener() {
//获取手指开始位置的坐标
int startX;
int startY;
@Override
public boolean onTouch(View v, MotionEvent event) { switch(event.getAction())
{
case MotionEvent.ACTION_DOWN: //手指第一次接触屏幕 startX = (int)event.getX();
startY = (int)event.getY();
break;
case MotionEvent.ACTION_MOVE: //手指在屏幕上移动 int newX = (int)event.getX();
int newY = (int)event.getY();
//画线
canvas.drawLine(startX, startY, newY, newY, paint); //重新更新画笔开始位置
startX = (int)event.getX();
startY = (int)event.getY();
iv.setImageBitmap(baseBitmap);
break;
case MotionEvent.ACTION_UP: //手指离开屏幕的动作 break; } //return true 表示画笔一直触动
return true;
} });
} public void selectImage(View view)
{
Intent intent = new Intent();
intent.setAction(Intent.ACTION_PICK);
intent.setType("image/*");
startActivityForResult(intent, 0); } @Override
protected void onActivityResult(int arg0, int arg1, Intent data) {
if(data!=null)
{ Uri uri = data.getData();
Bitmap bitmap = data.getParcelableExtra("data");
baseBitmap = bitmap;
iv.setImageURI(uri); }
super.onActivityResult(arg0, arg1, data);
} public void save(View view)
{
try { File file = new File(Environment.getExternalStorageDirectory(),System.currentTimeMillis()+".jpg");
FileOutputStream fos = new FileOutputStream(file);
//保存图片
baseBitmap.compress(CompressFormat.JPEG, 100, fos); Toast.makeText(this, "保存图片成功", 0).show(); //模拟一个消息通知系统sd卡被重新挂载
Intent intent = new Intent();
intent.setAction(Intent.ACTION_MEDIA_MOUNTED);
intent.setData(Uri.fromFile(Environment.getExternalStorageDirectory()));
sendBroadcast(intent); } catch (Exception e) {
Toast.makeText(this, "保存图片失败", 0).show();
e.printStackTrace();
} } }

android 简单的画图片的更多相关文章

  1. Android简单逐帧动画Frame的实现(二)

    Android简单逐帧动画Frame的实现   Android简单逐帧动画Frame的实现 1.逐帧动画 即是通过播放预先排序好的图片来实现动态的画面,感觉像是放电影. 2.实现步骤: 1. 在工程里 ...

  2. Android简单文件浏览器源代码 (转)

    Android简单文件浏览器源代码 (转) activity_main .xml <LinearLayout xmlns:android="http://schemas.android ...

  3. Android简单介绍SharedPreference,内部文件,sdcard数据存储

    SharedPreference 以xml的结构储存简单的数据,储存在data/data/程序包名/shared_prefs文件夹中 使用方式 创建对象的方式有三种 Context 的 getShar ...

  4. android简单登陆和注册功能实现+SQLite数据库学习

    最近初学android,做了实验室老师给的基本任务,就是简单的登陆和注册,并能通过SQLite实现登陆,SQlLite是嵌入在安卓设备中的 好了下面是主要代码: 数据库的建立: 这里我只是建立了一个用 ...

  5. Android简单的ListViewDemo及每个控件的点击事件

    ListView是什么? ListView是一个 数据控件,可以展示从数据库中读取的数据.是.net3.5的新控件. 它比gridview更灵活,而且支持多种模板,支持分页. 文章地址 http:// ...

  6. Android简单加密保护自有图片资源

    现在大部分android应用的图片资源,被反编译后就可以直接拿来用,如果不想让自己的图片资源直接被反编译后使用,首先想到的应该是把图片加密.这里笔者抛砖引玉,草草写了一个对图片进行简单加密的方法,希望 ...

  7. Android 简单计算器源码....

    PS:今天算是闲着没事做了一个小型的计算器...顺便熟悉一下Android的布局,组件,以及时间监听的方法...就当是做了一个小小的练习吧...     顺便去对比了一下别人写的代码...有的使用到了 ...

  8. 也发一个自己实现的android简单文件选择器代码。支持多卡,排序

    一个很简单的文件选择器对话框,支持双sd卡,当然前提是要有sd卡..并且实现了排序效果. 只有100多行的代码,基本的思路就是用listview显示目录下的所有子文件,再判断是文件还是目录. 利用Co ...

  9. Android简单计算器

    这是很久之前做的,方法很简单,都是一些基础的,不足的是还有很多功能不够. activity_main.xml布局: <LinearLayout xmlns:android="http: ...

随机推荐

  1. 在Python中调用C++模块

    一.一般调用流程 http://www.cnblogs.com/huangshujia/p/4394276.html 二.Python读取图像并传入C++函数,再从C++返回结果图像给Python h ...

  2. Galaxy S10使用几乎零黑边框的OLED显示屏

    2019年的首波安卓旗舰中,目前关于三星Galaxy S10的爆料是最多的,在销量连续萎缩后,外界对手机一哥的“发力之作”充满期待. 据TheElec报道,Galaxy S10正面使用的是一块几乎零黑 ...

  3. BZOJ2213[Poi2011]Difference——DP

    题目描述 A word consisting of lower-case letters of the English alphabet ('a'-'z') is given. We would li ...

  4. BZOJ3625 [Codeforces Round #250]小朋友和二叉树(生成函数+多项式开根)

    设f(n)为权值为n的神犇二叉树个数.考虑如何递推求这个东西. 套路地枚举根节点的左右子树.则f(n)=Σf(i)f(n-i-cj),cj即根的权值.卷积的形式,cj也可以通过卷上一个多项式枚举.可以 ...

  5. day5 算数,比较,赋值,逻辑运算符,表达式

    算数运算符 + 加- 减* 乘/ 除// 整除% 取余** 指数 算数优先级: 指数>乘除>加减 ps:python里面区分优先级只有小括号 () 没有 [] 和 {} , 比较运算符 = ...

  6. KMP模板(KMP)

    放一个模板在这里搞事情...... 学KMP的话找SYCstudio吧(博客链接) 代码(多组数据,\(O(n)\)求一个串是否在另一个串里出现过) #include<cstdio> #d ...

  7. 【BZOJ3879】SvT(后缀自动机,虚树)

    [BZOJ3879]SvT(后缀自动机,虚树) 题面 BZOJ 题解 看着这个东西,询问若干个前缀两两之间的\(lcp\)? 显然\(lcp\)就是\(SAM\)构建出来的\(parent\)数上的\ ...

  8. SharePoint 2013 APP 开发示例 (一)List 读写

    在这个示例里,我们将创建一个页面测试 SharePoint APP的权限.这个页面有二个按钮,一个从documents里读数据,一个往documents里写数据: 1. 打开Visual Studio ...

  9. MATLAB:图像乘除法运算(immultiply、imdivide函数),同时比较双精度类型图像运算结果

    图像乘除法运算涉及到immultiply.imdivide函数,实现代码如下: 1.图像之间的乘法运算 close all; %关闭当前所有图形窗口,清空工作空间变量,清除工作空间所有变量 clear ...

  10. Shell中while循环的done 后接一个重定向<

    读文件的方法: 第一步: 将文件的内容通过管道(|)或重定向(<)的方式传给while 第二步: while中调用read将文件内容一行一行的读出来,并付值给read后跟随的变量.变量中就保存了 ...