android 简单的画图片
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 简单的画图片的更多相关文章
- Android简单逐帧动画Frame的实现(二)
Android简单逐帧动画Frame的实现 Android简单逐帧动画Frame的实现 1.逐帧动画 即是通过播放预先排序好的图片来实现动态的画面,感觉像是放电影. 2.实现步骤: 1. 在工程里 ...
- Android简单文件浏览器源代码 (转)
Android简单文件浏览器源代码 (转) activity_main .xml <LinearLayout xmlns:android="http://schemas.android ...
- Android简单介绍SharedPreference,内部文件,sdcard数据存储
SharedPreference 以xml的结构储存简单的数据,储存在data/data/程序包名/shared_prefs文件夹中 使用方式 创建对象的方式有三种 Context 的 getShar ...
- android简单登陆和注册功能实现+SQLite数据库学习
最近初学android,做了实验室老师给的基本任务,就是简单的登陆和注册,并能通过SQLite实现登陆,SQlLite是嵌入在安卓设备中的 好了下面是主要代码: 数据库的建立: 这里我只是建立了一个用 ...
- Android简单的ListViewDemo及每个控件的点击事件
ListView是什么? ListView是一个 数据控件,可以展示从数据库中读取的数据.是.net3.5的新控件. 它比gridview更灵活,而且支持多种模板,支持分页. 文章地址 http:// ...
- Android简单加密保护自有图片资源
现在大部分android应用的图片资源,被反编译后就可以直接拿来用,如果不想让自己的图片资源直接被反编译后使用,首先想到的应该是把图片加密.这里笔者抛砖引玉,草草写了一个对图片进行简单加密的方法,希望 ...
- Android 简单计算器源码....
PS:今天算是闲着没事做了一个小型的计算器...顺便熟悉一下Android的布局,组件,以及时间监听的方法...就当是做了一个小小的练习吧... 顺便去对比了一下别人写的代码...有的使用到了 ...
- 也发一个自己实现的android简单文件选择器代码。支持多卡,排序
一个很简单的文件选择器对话框,支持双sd卡,当然前提是要有sd卡..并且实现了排序效果. 只有100多行的代码,基本的思路就是用listview显示目录下的所有子文件,再判断是文件还是目录. 利用Co ...
- Android简单计算器
这是很久之前做的,方法很简单,都是一些基础的,不足的是还有很多功能不够. activity_main.xml布局: <LinearLayout xmlns:android="http: ...
随机推荐
- linux中tomcat修改错误日志路径
涉及文件 log4j.properties (一般开发将该文件放在项目的缺省目录即源包下,在文件系统里,就是在项目的/src/java目录下,缺省的文件名是log4j.properties,这样项 ...
- Java中一些jar包的作用
axis.jar SOAP引擎包 commons-discovery-0.2.jar 用来发现.查找和实现可插入式接口,提供一些一般类实例化.单件的生命周期管理的常用方法. jaxrpc.jar Ax ...
- notepad编写html
notepad写代码的过程: 1.打开notepad,新建一个文档,然后保存,文件的后缀名为.html,代码保存前界面上文件名称为红色,保存后蓝色: 2.保存为html后,进行代码的输入,如果设置好自 ...
- pgm13
这部分开始,我们将讨论 learning 相关的内容.PGM 为 frequentist 与 Bayesian 系的 model 提供了同一种语言,对前者来说 learning 就是确定一种对“未知但 ...
- BZOJ3172[Tjoi2013]单词——AC自动机(fail树)
题目描述 某人读论文,一篇论文是由许多单词组成.但他发现一个单词会在论文中出现很多次,现在想知道每个单词分别在论文中出现多少次. 输入 第一个一个整数N,表示有多少个单词,接下来N行每行一个单词.每个 ...
- sql server 小技巧(8) visual studio 2013里使用Sql server compact 4.0及发布问题处理
1. 安装 Microsoft SQL Server Compact 4.0 https://www.microsoft.com/zh-cn/download/confirmation.aspx?i ...
- 前端学习 -- Html&Css -- ie6 png 背景问题
在IE6中对图片格式png24支持度不高,如果使用的图片格式是png24,则会导致透明效果无法正常显示 解决方法: 1.可以使用png8来代替png24,即可解决问题,但是使用png8代替png24以 ...
- linux 自定义信号
从来没试过linux自定义信号,查了下,说是系统只提供了SIGUSR1和SIGUSR2两个,就两个够吗?更要命的是如果要自定义信号如#define SIG_MYSIG ....的话要改内核才行,哥 ...
- activeMQ点对点
摘要: ActiveMQ 点对点消息 Point-to-Point 是一对一 创建消息生产者 /** * 点对点消息生产者 * * @author Edward * */ public ...
- Spring核心组件剖析
简介 Spring框架如今已成为服务端开发框架中的主流框架之一,是web开发者的利器.然而,真正让人着迷的,还是与其实现相关的 原理,设计模式以及许多工程化的思想.本文主要探讨Spring的三大核心组 ...