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();
            }
    
        }
  • 相关阅读:
    解决tomcat启东时一闪而过的问题
    如果数据库中的时间类型与mybatis的时间类型对应关系
    el 表达式中某一项过长时需要截取字符串长度,当悬停的时候显示全部内容
    ubuntu/linux系统中安装jdk以及eclipse(附图解详细步骤)
    Unity利用SMSSDK实现短信验证码(附代码)
    Unity利用Share SDK实现QQ、微信及微博第三方登录及定制内容分享(附代码)
    Unity编辑器扩展
    VR中射线点击按钮的实现
    Unity中几个特殊路径在各个平台的访问方式
    多态
  • 原文地址:https://www.cnblogs.com/wuyudong/p/5841486.html
Copyright © 2011-2022 走看看