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();
        }

    }

}
时间: 2024-10-16 20:29:44

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

android 简单文件操作

1.布局 <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:orient

Android简单登陆页面

布局: 线性布局+相对布局 日志打印: 利用LogCat和System.out.println打印观察. Onclick事件是采用过的第四种: 在配置文件中给Button添加点击时间 涉及知识: 通过上线文context获得文件的路径和缓存路径,保存文件 布局代码: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.an

Android简单的分享笔记

http://blog.csdn.net/xyz_lmn/article/details/16856843 采用Intent隐式调用Activity的方法,主要使用Intent.ACTION_SEND和Intent.createChooser(); 调用Android系统的分享接口.系统会过滤手机上的具有分享应用的程序,让用户进行选择.如果没有使用Intent.createChooser()则会取系统默认的用户分享方式,只有未设置的情况下才会弹出让用户进行选择. 1.简单的分享文本 1 Inte

Android简单的handler处理

1 package com.example.androidprojecttest; 2 3 import android.os.Bundle; 4 import android.os.Handler; 5 import android.os.Message; 6 import android.os.Messenger; 7 import android.R.id; 8 import android.app.Activity; 9 import android.content.Intent; 10

Android简单封装类似JQuery异步请求

在android开发中经常会使用异步请求数据,通常会使用handler或者AsyncTask去做,handler 配合message 使用起来比较麻烦,AsyncTask 线程池只允许128个线程工作,会有溢出的问题,(当然一般情况不会有那么多线程同时工作的)所以写了这个代码,还望高手指正! [Java]代码 01 package com.xbl.task; 02 03 import java.io.BufferedReader; 04 import java.io.InputStream; 0

android 简单的登录

一直都知道WEB通过登录后session拿着回答,如今,安卓不知道怎么弄的. 研究了一下,它记录.直接在代码: server结束: index.jsp <%@page import="java.io.PrintWriter"%> <%@page import="com.sun.org.apache.xml.internal.serialize.Printer"%> <%@page import="com.google.gson

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

Android简单文件浏览器源代码 (转) activity_main .xml <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=&qu

android 简单动画之 animtion

Android  简单的动画效果有Animtion 类提供 1.在XML中实现动画效果:2.在java代码中实现动画效果. 动画相关的属性 表一:SET属性 名称 属性 备注 android:shareInterpolator 是否共享插入器 共享时,四个子节点都用一个插入器 android:interpolator 指定一个动画的插入器 使用系统资源 android:fillEnabled 当设置为true时,fillAfter和fillBefroe将会都为true,此时会忽略fillBefo

Android简单登录系统

很长时间没有写博客了,最近一直在写android for gis方面的项目.不过这篇博客就不写gis方面的了,今天刚刚做的一个简单的android登录系统.数据库是android自带的sqlite,sqlite的优势就不用我说了哈.下面进入正题. 1.数据库Help类 我们需要编写一个数据库辅助类来访问sqlite数据库.在数据库辅助类中,可以完成数据库的创建,表的增加.删除.修改.查询等操作. 1 public class DBHelper extends SQLiteOpenHelper {