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