Android画画板小案例

来源:互联网 发布:最简单的游戏c编程 编辑:程序博客网 时间:2024/04/30 05:10
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();                }            }        }    }}
0 0
原创粉丝点击