点击按钮弹出PopupWord然后拍照+相册选取+剪裁图片

2018-07-27  本文已影响0人  duwensheng

1.要用普通的图片的话就设置成简单的ImageView

圆形图片的话就先导入一个依赖 : implementation 'de.hdodenhof:circleimageview:2.1.0'

示例为圆形图片:

一:main布局:

    xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    xmlns:app="http://schemas.android.com/apk/res-auto"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical"

    android:id="@+id/dage"

    tools:context=".MainActivity">

        android:layout_gravity="center"

        android:id="@+id/imageID"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content" />

        android:text="点一下,给你惊喜"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:id="@+id/but"/>

PopupWoeder布局:

    android:orientation="vertical"

    xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent">

        android:id="@+id/btn_02"

        android:layout_height="wrap_content"

        android:text="拍照"

        android:layout_width="match_parent" />

        android:id="@+id/btn_01"

        android:layout_height="wrap_content"

        android:text="相册"

        android:layout_width="match_parent" />

        android:id="@+id/btn_03"

        android:layout_height="wrap_content"

        android:text="取消"

        android:layout_width="match_parent" />

Activity 代码:

import android.content.Intent;

import android.graphics.Bitmap;

import android.graphics.Color;

import android.graphics.drawable.ColorDrawable;

import android.net.Uri;

import android.os.Bundle;

import android.os.Environment;

import android.provider.MediaStore;

import android.support.v7.app.AppCompatActivity;

import android.view.Gravity;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.Button;

import android.widget.LinearLayout;

import android.widget.PopupWindow;

import java.io.ByteArrayOutputStream;

import java.io.File;

import de.hdodenhof.circleimageview.CircleImageView;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private View view;

    private PopupWindow popupWindow;

    private Button button2;

    private Button button1;

    private Button button0;

    private CircleImageView imageID;

    private Button but;

    private LinearLayout dage;

    public static final int NONE = 0;

    public static final int PHOTOHRAPH = 1;// 拍照

    public static final int PHOTOZOOM = 2; // 缩放

    public static final int PHOTORESOULT = 3;// 结果

    public static final String IMAGE_UNSPECIFIED = "image/*";

  // ImageView imageView = null;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        initView();

        initPopup();

    }

    private void initView() {

        imageID = findViewById(R.id.imageID);

        but = (Button) findViewById(R.id.but);

        dage=findViewById(R.id.dage);

        but.setOnClickListener(this);

    }

    @Override

    public void onClick(View v) {

        switch (v.getId()) {

            case R.id.but:

                popupWindow.showAtLocation(dage, Gravity.BOTTOM, 0, 0);

                break;

        }

    }

    private void initPopup() {

        view= LayoutInflater.from(this).inflate(R.layout.item,null);

        button0=view.findViewById(R.id.btn_01);

        button1=view.findViewById(R.id.btn_02);

        button2=view.findViewById(R.id.btn_03);

        popupWindow = new PopupWindow(view, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, true);

        popupWindow.setOutsideTouchable(true);

        popupWindow.setFocusable(true);

        popupWindow.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#FF6347")));

        button0.setOnClickListener(new View.OnClickListener(){

            @Override

            public void onClick(View v) {

                Intent intent = new Intent(Intent.ACTION_PICK, null);

                intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, IMAGE_UNSPECIFIED);

                startActivityForResult(intent, PHOTOZOOM);

                if (popupWindow.isShowing()) {

                  popupWindow.dismiss();

                }

            }

        });

        button1.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

                intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "temp.jpg")));

                startActivityForResult(intent, PHOTOHRAPH);

                if (popupWindow.isShowing()) {

                  popupWindow.dismiss();

                }

            }

        });

        button2.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                if (popupWindow.isShowing()) {

                    popupWindow.dismiss();

                }

            }

        });

    }

    @Override

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        if (resultCode == NONE)

            return;

        // 拍照

        if (requestCode == PHOTOHRAPH) {

            //设置文件保存路径这里放在跟目录下

            File picture = new File(Environment.getExternalStorageDirectory() + "/temp.jpg");

            startPhotoZoom(Uri.fromFile(picture));

        }

        if (data == null)

            return;

        // 读取相册缩放图片

        if (requestCode == PHOTOZOOM) {

            startPhotoZoom(data.getData());

        }

        // 处理结果

        if (requestCode == PHOTORESOULT) {

            Bundle extras = data.getExtras();

            if (extras != null) {

                Bitmap photo = extras.getParcelable("data");

                ByteArrayOutputStream stream = new ByteArrayOutputStream();

                photo.compress(Bitmap.CompressFormat.JPEG, 75, stream);// (0 - 100)压缩文件

                imageID.setImageBitmap(photo);

            }

        }

        super.onActivityResult(requestCode, resultCode, data);

    }

    public void startPhotoZoom(Uri uri) {

        Intent intent = new Intent("com.android.camera.action.CROP");

        intent.setDataAndType(uri, IMAGE_UNSPECIFIED);

        intent.putExtra("crop", "true");

        // aspectX aspectY 是宽高的比例

        intent.putExtra("aspectX", 1);

        intent.putExtra("aspectY", 1);

        // outputX outputY 是裁剪图片宽高

        intent.putExtra("outputX", 100);

        intent.putExtra("outputY", 100);

        intent.putExtra("return-data", true);

        startActivityForResult(intent, PHOTORESOULT);

    }

}

上一篇下一篇

猜你喜欢

热点阅读