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: ...
随机推荐
- rgb & rgba convert
rgb & rgba convert RGB color to Hex, Pantone, RAL, HSL, HSV, HSB, JSON. Get color scheme. https: ...
- Delphi中统一显示表格字段名的高效方法
问题描述:在开发数据库程序时,我们经常要使用很多的表格显示组件DBGrid.当DBGrid显示某表格的数据时,其字段标题默认的就是后台数据库中的表格的字段名称.而为了数据库开发方便,后台数据库中的表格 ...
- 【Linux】工作管理
在进行工作管理的行为中,其实每个工作都是目前bash的子进程,即彼此间是有相关性的.我们无法以job control的方式由tty1的环境去管理tty2的bash 当只有一个终端时,可以出现提示符让你 ...
- 【转】Thread Local的正确原理与适用场景
本文转发自技术世界,原文链接 http://www.jasongj.com/java/threadlocal/ ThreadLocal解决什么问题 由于 ThreadLocal 支持范型,如 Thre ...
- python 模块之-os
python os模块 import os os.getcwd() # python脚本所在工作目录的路径 os.chdir(r'/tmp') # 切换目录到tmp os. ...
- Django-website 程序案例系列-1 最简单的web服务器
templates:html模板文件夹下面建立文件login.html <!DOCTYPE html> <html lang="en"> <head& ...
- 基于Spring Security和 JWT的权限系统设计
写在前面 关于 Spring Security Web系统的认证和权限模块也算是一个系统的基础设施了,几乎任何的互联网服务都会涉及到这方面的要求.在Java EE领域,成熟的安全框架解决方案一般有 A ...
- BZOJ5298 [CQOI2018] 交错序列 | 矩阵乘法和一个trick
题面 求所有长度为\(n\)的.没有相邻的1的01序列中,若0有\(x\)个.1有\(y\)个,\(x^ay^b\)之和(对\(m\)取模). \(n \le 10^7, m \le 10^8, 0 ...
- luogu2149 Elaxia的路线 (dijkstra+拓扑dp)
先标记上一个人所有最短路上的边(同时也要标记反向边) 然后拿着另一个人最短路上的边(会构成一个DAG)去做拓扑dp,记从原点到某个点的最大的某个路径的被标记的边的个数 #include<bits ...
- luogu2827 [NOIp2016]蚯蚓 (模拟)
可以直观地想到用优先队列来做,但数据范围是O(n)的 然后我们发现,因为我们每次挑出来的蚯蚓是单调的,所以把每个切成两段后,那两段也是对应单调的 也就是说,算上最一开始的蚯蚓,我们一共维护三个队列,三 ...