package com.itheima74.paintdemo;import android.content.Intent;import android.graphics.Bitmap;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.Environment;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.MotionEvent;import android.view.View;import android.widget.ImageView;import android.widget.Toast;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;/** * 画画板小案例 */public class MainActivity extends AppCompatActivity { PRivate ImageView iv; private Canvas canvas; private Paint paint; private Bitmap bitmap_copy; private float strokeWidth = 5;// paint默认宽度 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); iv = (ImageView) findViewById(R.id.iv); // 获取原图 Bitmap bitmap_src = BitmapFactory.decodeResource(getResources(), R.drawable.bg); // 创建副本 bitmap_copy = Bitmap.createBitmap(bitmap_src.getWidth(), bitmap_src.getHeight(), bitmap_src.getConfig()); canvas = new Canvas(bitmap_copy); paint = new Paint(); canvas.drawBitmap(bitmap_src, new Matrix(), paint); //将副本设置给iv控件 iv.setImageBitmap(bitmap_copy); // 设置iv的触摸事件 iv.setOnTouchListener(new View.OnTouchListener() { private int downX; private int downY; @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: downX = (int) event.getX(); downY = (int) event.getY(); System.out.println("down,x:" + downX + ",y:" + downY); break; case MotionEvent.ACTION_MOVE: int moveX = (int) event.getX(); int moveY = (int) event.getY(); System.out.println("move,x:" + moveX + ",y:" + moveY); // 画线 canvas.drawLine(downX, downY, moveX, moveY, paint); // 画图完毕后展示到iv控件上 iv.setImageBitmap(bitmap_copy); // 更新起点坐标 downX = moveX; downY = moveY; break; case MotionEvent.ACTION_UP: break; } return true;// 返回true,ACTION_MOVE,ACTION_UP才执行 } }); } // 点击按钮,画笔变白色 public void click1(View view) { paint.setColor(Color.WHITE); } // 点击按钮,画笔变红色 public void click2(View view) { paint.setColor(Color.RED); } // 点击按钮,画笔加粗 public void click3(View view) { strokeWidth += 5; if (strokeWidth < 30) { paint.setStrokeWidth(strokeWidth); } } // 点击按钮,画笔变细 public void click4(View view) { strokeWidth -= 5; if (strokeWidth > 0) { paint.setStrokeWidth(strokeWidth); } } // 点击按钮,保存图片到SD卡 public void click5(View view) { FileOutputStream fos = null; try { fos = new FileOutputStream(new File(Environment.getExternalStorageDirectory() + "/" + System.currentTimeMillis() + ".jpg")); boolean compress = bitmap_copy.compress(Bitmap.CompressFormat.JPEG, 100, fos); if (compress) { Toast.makeText(this, "保存成功", Toast.LENGTH_SHORT).show(); // 发送一条无序广播通知图片应用去加载图片 Intent intent = new Intent(); intent.setAction(Intent.ACTION_MEDIA_MOUNTED);// 4.4以前 // intent.setAction(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);// 4.4以后 intent.setData(Uri.fromFile(Environment.getExternalStorageDirectory())); sendBroadcast(intent); } else { Toast.makeText(this, "保存失败", Toast.LENGTH_SHORT).show(); } } catch (FileNotFoundException e) { e.printStackTrace(); } finally { if (fos != null) { try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } } }}
新闻热点
疑难解答