Android-简单画板

Java代码:
public class MainActivity extends Activity {
    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);

        Resources resources = this.getResources();
        DisplayMetrics dm = resources.getDisplayMetrics();
        float density = dm.density;
        int bitmapWidth = dm.widthPixels;
        int bitmapHeight = dm.heightPixels;

        int paintWidth = 5;
        getCanvas(Color.GRAY,Color.RED,paintWidth,bitmapWidth,bitmapHeight);
    }

    /**
     * @param canvasColor 画布颜色
     * @param paintColor 画笔颜色
     * @param paintWidth 画笔宽度
     * @param bitmapWidth 画布宽度
     * @param bitmapHeight 画布宽度
     */
    public void getCanvas(int canvasColor,int paintColor,int paintWidth,int bitmapWidth,int bitmapHeight){
        this.iv = (ImageView) this.findViewById(R.id.iv);
        // 创建一张空白图片
        baseBitmap = Bitmap.createBitmap(bitmapWidth, bitmapHeight, Bitmap.Config.ARGB_8888);
        // 创建一张画布
        canvas = new Canvas(baseBitmap);
        // 画布背景为灰色
        canvas.drawColor(canvasColor);
        // 创建画笔
        paint = new Paint();
        // 画笔颜色为红色
        paint.setColor(paintColor);
        // 宽度5个像素
        paint.setStrokeWidth(paintWidth);
        // 先将灰色背景画上
        canvas.drawBitmap(baseBitmap, new Matrix(), paint);
        iv.setImageBitmap(baseBitmap);

        iv.setOnTouchListener(new View.OnTouchListener() {
            int startX;
            int startY;

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        // 获取手按下时的坐标
                        startX = (int) event.getRawX();
                        startY = (int) event.getRawY();
                        break;
                    case MotionEvent.ACTION_MOVE:
                        // 获取手移动后的坐标
                        int stopX = (int) event.getRawX();
                        int stopY = (int) event.getRawY();
                        // 在开始和结束坐标间画一条线
                        canvas.drawLine(startX, startY, stopX, stopY, paint);
                        // 实时更新开始坐标
                        startX = (int) event.getRawX();
                        startY = (int) event.getRawY();
                        iv.setImageBitmap(baseBitmap);
                        break;
                }
                return true;
            }
        });
    }

    /**
     * 保存
     * @param view
     */
    public void save(View view) {
        try {
            //获取内部存储状态
            String state = Environment.getExternalStorageState();
            //如果状态不是mounted,无法读写
            if (state.equals(Environment.MEDIA_MOUNTED)) {
                File file = new File(Environment.getExternalStorageDirectory(),
                        System.currentTimeMillis() + ".jpg");
                System.out.println("路径:"+file.toString());
                OutputStream stream = new FileOutputStream(file);
                baseBitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
                stream.flush();
                stream.close();
                // 模拟一个广播,通知系统sdcard被挂载
                Intent intent = new Intent();
                intent.setAction(Intent.ACTION_MEDIA_MOUNTED);
                intent.setData(Uri.fromFile(Environment
                        .getExternalStorageDirectory()));
                sendBroadcast(intent);

                Toast.makeText(this, "保存图片成功", (int)0).show();
            }else{
                Toast.makeText(this, "状态不是mounted,无法读写", (int)0).show();
            }
        } catch (Exception e) {
            Toast.makeText(this, "保存图片失败", (int)0).show();
            e.printStackTrace();
        }
    }
}
布局:
<ImageView
        android:id="@+id/iv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />
权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>


                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值