package com.example.paintborad;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import android.support.v7.app.ActionBarActivity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.os.SystemClock;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageView;
public class MainActivity extends ActionBarActivity {
private ImageView iv;
private Bitmap bitmap2;
private Canvas canvas;
private Paint paint;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv = (ImageView) findViewById(R.id.iv);
// 获取原图背景
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),
R.drawable.bg);
bitmap2 = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(),
bitmap.getConfig());
paint = new Paint();
canvas = new Canvas(bitmap2);
// 开始作画,canvas上面才可以画
canvas.drawBitmap(bitmap, new Matrix(), paint);// 在canvas画了个bitmap(背景图片)
canvas.drawLine(10, 20, 60, 100, paint);// 在canvas画了个线
iv.setImageBitmap(bitmap2);
// 给控件iv一个触摸事件
iv.setOnTouchListener(new OnTouchListener() {
int startX = 0;
int startY = 0;
@Override
public boolean onTouch(View v, MotionEvent event) {
// 获取事件类型
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
System.out.println("按下");
// 获取按下位置
startX = (int) event.getX();
startY = (int) event.getY();
break;
case MotionEvent.ACTION_MOVE:
System.out.println("移动");
// 获取移动点位置
int stopX = (int) event.getX();
int stopY = (int) event.getY();
canvas.drawLine(startX, startY, stopX, stopY, paint);
iv.setImageBitmap(bitmap2);
// 更新开始位置
startX = stopX;
startY = stopY;
break;
case MotionEvent.ACTION_UP:
System.out.println("抬起");
break;
}
// Returns:
// True if the listener has consumed the event, false otherwise.
return true;// 这里必须是true
}
});
}
//画笔变粗
public void click1(View v) {
paint.setStrokeWidth(10);
}
//红色
public void click2(View v) {
paint.setColor(Color.RED);
}
//保存
public void click3(View v) {
System.out.println("保存图片");
try {
//创建一个图片文件
String path = Environment.getExternalStorageDirectory().getPath()+File.separator+"aixi";
if(!new File(path).exists()){
new File(path).mkdir();
}
File file=new File(path, SystemClock.uptimeMillis()+".png");
System.out.println("存放地址:"+path);
//创建一个流通往图片文件
FileOutputStream fos=new FileOutputStream(file);
//使用流把图片数据传输到图片文件
//compress有打包的意思
bitmap2.compress(CompressFormat.PNG, 100, fos);
/*
//发布个虚假广播欺骗手机相册,让手机相册重新加载sd卡图片
//发送一个虚假的重载sd广播
Intent intent=new Intent(Intent.ACTION_MEDIA_MOUNTED);
intent.setData(Uri.fromFile(Environment.getExternalStorageDirectory()));
//发送一条广播
sendBroadcast(intent);
*/
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
Intent mediaScanIntent = new Intent(
Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
Uri contentUri = Uri.fromFile(file);
mediaScanIntent.setData(contentUri);
this.sendBroadcast(mediaScanIntent);
} else {
Intent intent=new Intent(Intent.ACTION_MEDIA_MOUNTED);
intent.setData(Uri.fromFile(Environment.getExternalStorageDirectory()));
//发送一条广播
sendBroadcast(intent);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}