zoukankan      html  css  js  c++  java
  • Android 实现图片画画板

    本文主要讲述了Android 实现图片画画板

    设计项目布局:

    <RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context=".MainActivity" >
    
        <ImageView
            android:layout_above="@+id/bt"
            android:id="@+id/iv"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />
    
        <Button
            android:id="@+id/bt"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:onClick="save"
            android:text="保存图片" />
    
    </RelativeLayout>

    首先实现画图功能:

    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);
            iv = (ImageView) findViewById(R.id.iv);
            paint = new Paint();
            paint.setStrokeWidth(5);
            paint.setColor(Color.GREEN);
            
            // 创建一个可以被修改的bitmap
            baseBitmap = Bitmap.createBitmap(320, 360,
                    Bitmap.Config.ARGB_8888);
            System.out.println("图宽度:"+iv.getWidth());
            System.out.println("图高度:"+iv.getHeight());
            canvas = new Canvas(baseBitmap);
            canvas.drawColor(Color.WHITE);
    
            // 知道用户手指在屏幕上移动的轨迹
            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, newX, newY, paint);
                        // 重新更新画笔的开始位置
                        startX = (int) event.getX();
                        startY = (int) event.getY();
                        iv.setImageBitmap(baseBitmap);
                        break;
                    case MotionEvent.ACTION_UP: // 手指离开屏幕
                        break;
    
                    default:
                        break;
                    }
                    return true;
                }
            });
        }
    
        public void save(View view) {
    
        }
    
    }

    接下来完成保存图片的功能:

        public void save(View view) {
            try {
                File file = new File(Environment.getExternalStorageDirectory(),
                        System.currentTimeMillis() + ".jpg");
                FileOutputStream stream = new FileOutputStream(file);
                baseBitmap.compress(CompressFormat.JPEG, 100, stream);
                stream.close();
                Toast.makeText(this, "保存图片成功", 1).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, "保存图片失败", 1).show();
                e.printStackTrace();
            }
    
        }
  • 相关阅读:
    C++文件流类与文件流对象
    当java出现异常,应如何进行处理
    C语言函数的声明以及函数原型
    MySQL的create table as 与 like区别
    java中BigDecimal加减乘除基本用法
    项目小结
    自动化测试 如何快速提取Json数据
    Java Map 集合类在selenium自动化测试设计中的应用
    UFT对于PDF 文档的操作方法 VBS代码
    Selenium 自动化测试中对页面元素的value比较验证 java语言
  • 原文地址:https://www.cnblogs.com/wuyudong/p/5841486.html
Copyright © 2011-2022 走看看