• 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();
                }
    
            }
        }
    
    }






    效果:

    找一个博客做自己的女朋友,不管你跟她说什么她都帮你记录,这是多么幸福的一件事啊。如果有女生能做到这点,赶尽娶回家吧!
  • 相关阅读:
    LeetCode 88. Merge Sorted Array
    LeetCode 75. Sort Colors
    LeetCode 581. Shortest Unsorted Continuous Subarray
    LeetCode 20. Valid Parentheses
    LeetCode 53. Maximum Subarray
    LeetCode 461. Hamming Distance
    LeetCode 448. Find All Numbers Disappeared in an Array
    LeetCode 976. Largest Perimeter Triangle
    LeetCode 1295. Find Numbers with Even Number of Digits
    如何自学并且系统学习计算机网络?(知乎问答)
  • 原文地址:https://www.cnblogs.com/hexiaochun/p/2715832.html
Copyright © 2020-2023  润新知