• android 加载图片并在上面画图


    像Ps上的应用一样,我们加载一个图片然后在上面增加各种我们需要的挂件,文字效果等。我们今天完成一个简单的Demo

    
    
    package com.example.fingerdraw;
    
    import java.io.FileNotFoundException;
    import java.io.OutputStream;
    
    import android.app.Activity;
    import android.content.ContentValues;
    import android.content.Intent;
    import android.graphics.Bitmap;
    import android.graphics.Bitmap.CompressFormat;
    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.Bundle;
    import android.provider.MediaStore.Images.Media;
    import android.view.Display;
    import android.view.MotionEvent;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.View.OnTouchListener;
    import android.widget.Button;
    import android.widget.ImageView;
    import android.widget.Toast;
    
    public class MainActivity extends Activity implements OnTouchListener,
            OnClickListener {
    
        private ImageView image;
        private Paint paint;
        private Canvas canvas;
        private Bitmap bitmap;
        private Bitmap alterBitmap;
        private Button choose;
        private Button save;
        private final static int RESULT = 0;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            image = (ImageView) findViewById(R.id.image);
            choose = (Button) findViewById(R.id.chooseButton);
            save=(Button)findViewById(R.id.saveButton);
            /*
             * bitmap = Bitmap.createBitmap(getWindowManager().getDefaultDisplay()
             * .getWidth(), getWindowManager().getDefaultDisplay().getHeight(),
             * Bitmap.Config.ARGB_8888); canvas = new Canvas(bitmap);// 画板 paint =
             * new Paint();// 画刷 paint.setColor(Color.BLUE);
             * image.setImageBitmap(bitmap);
             */
    
            image.setOnTouchListener(this);
            choose.setOnClickListener(this);
            save.setOnClickListener(this);
        }
    
        private float downx = 0;
        private float downy = 0;
        private float upx = 0;
        private float upy = 0;
    
        public boolean onTouch(View v, MotionEvent event) {
            int action = event.getAction();
            switch (action) {
            case MotionEvent.ACTION_DOWN:
                downx = event.getX();
                downy = event.getY();
                break;
            case MotionEvent.ACTION_MOVE:
                // 路径画板
                upx = event.getX();
                upy = event.getY();
                canvas.drawLine(downx, downy, upx, upy, paint);
                image.invalidate();
                downx = upx;
                downy = upy;
                break;
            case MotionEvent.ACTION_UP:
                // 直线画板
    
                upx = event.getX();
                upy = event.getY();
                canvas.drawLine(downx, downy, upx, upy, paint);
                image.invalidate();// 刷新
                break;
    
            default:
                break;
            }
    
            return true;
        }
    
        public void onClick(View arg0) {
            if(arg0==choose){
            Intent intent = new Intent(Intent.ACTION_PICK,
                    android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
            startActivityForResult(intent, RESULT);
            }else if(arg0==save){
                //保存画好的图片
                if(alterBitmap!=null){
                    try {
                        Uri imageUri=getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, new ContentValues());
                        OutputStream outputStream=getContentResolver().openOutputStream(imageUri);
                        alterBitmap.compress(CompressFormat.PNG, 90, outputStream);
                        Toast.makeText(getApplicationContext(), "save!", Toast.LENGTH_SHORT).show();
                    } catch (FileNotFoundException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            // TODO Auto-generated method stub
            super.onActivityResult(requestCode, resultCode, data);
            if (resultCode == RESULT_OK) {
                Uri imageFileUri = data.getData();
                Display display = getWindowManager().getDefaultDisplay();
                float dw = display.getWidth();
                float dh = display.getHeight();
    
                try {
                    BitmapFactory.Options options = new BitmapFactory.Options();
                    options.inJustDecodeBounds = true;
                    bitmap = BitmapFactory.decodeStream(getContentResolver()
                            .openInputStream(imageFileUri), null, options);
                    int heightRatio = (int) Math.ceil(options.outHeight / dh);
                    int widthRatio = (int) Math.ceil(options.outWidth / dw);
                    if (heightRatio > 1 && widthRatio > 1) {
                        if (heightRatio > widthRatio) {
                            options.inSampleSize = heightRatio;
                        } else {
                            options.inSampleSize = widthRatio;
                        }
                    }
                    options.inJustDecodeBounds = false;
                    bitmap = BitmapFactory.decodeStream(getContentResolver()
                            .openInputStream(imageFileUri), null, options);
                    alterBitmap = Bitmap.createBitmap(bitmap.getWidth(),
                            bitmap.getHeight(), bitmap.getConfig());
                    canvas = new Canvas(alterBitmap);
                    paint = new Paint();
                    paint.setColor(Color.GREEN);
                    paint.setStrokeWidth(10);
                    Matrix matrix = new Matrix();
                    canvas.drawBitmap(bitmap, matrix, paint);
                    image.setImageBitmap(alterBitmap);
                    image.setOnTouchListener(this);
                } catch (FileNotFoundException e) {
    
                    e.printStackTrace();
                }
    
            }
        }
    
    }






    效果:

    找一个博客做自己的女朋友,不管你跟她说什么她都帮你记录,这是多么幸福的一件事啊。如果有女生能做到这点,赶尽娶回家吧!
  • 相关阅读:
    Token的生成和检验
    MD5和SHA加密实现
    服务器读取客户端数据
    服务器上传和下载文件
    NOI模拟题4 Problem B: 小狐狸(fox)
    NOI模拟题4 Problem A: 生成树(mst)
    混凝土数学第四章之数论学习笔记
    混凝土数学第二章和式之有限微积分 ( 离散微积分 ) 学习笔记
    网络流相关学习笔记
    NOI模拟题1 Problem A: sub
  • 原文地址:https://www.cnblogs.com/hexiaochun/p/2715832.html
Copyright © 2020-2023  润新知