Android一行代码实现拍照相册选取功能

近来拍照功能越来越多  反复的使用此功能我都快吐了

于是一时技痒,撸了一段代码实现一行代码拍照功能;

废话不多说直接上代码   此篇已经解决了7.0的适配问题

package com.bjxhgx.elongdrivervehcle.myapp;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;

import com.bjxhgx.elongdrivervehcle.myutils.BaseTakePhotoActivity;
import com.bumptech.glide.Glide;
import com.jph.takephoto.model.TResult;

import java.io.File;

public class MainActivity extends BaseTakePhotoActivity {
    private ImageView img;

    @Override
    protected int initView(Bundle savedInstanceState) {
        return R.layout.activity_main;
    }

    @Override
    protected void initActionBar() {
        img = (ImageView) findViewById(R.id.img);
        img.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //当控件点击的时候将控件传入即可
                //就这一行即可实现拍照功能 是不是很吊的样子
                onImgeViewClicked(img);
            }
        });

    }

    @Override
    protected void initDate() {

    }

}
下面是我自己封装的BaseTakePhotoActivity的代码  请不要客气拿去用就是了

package com.bjxhgx.elongdrivervehcle.myutils;

import android.net.Uri;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.PopupWindow;

import com.bumptech.glide.Glide;
import com.jph.takephoto.app.TakePhoto;
import com.jph.takephoto.app.TakePhotoActivity;
import com.jph.takephoto.compress.CompressConfig;
import com.jph.takephoto.model.TResult;

import java.io.File;

//继承自拍照的activity
public abstract class BaseTakePhotoActivity extends TakePhotoActivity {
    public static final String  TAG=BaseTakePhotoActivity.class.getSimpleName();
     private File file;
     private  PopupWindow popupWindow;
     private ImageView imageView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(initView(savedInstanceState));
        initActionBar();
        initDate();
    }

    protected abstract int initView(Bundle savedInstanceState);

    protected abstract void initActionBar();

    protected abstract void initDate();
    //打开相机
    public void openCamera() {
        file = new File(Environment.getExternalStorageDirectory(), "/temp/" + System.currentTimeMillis() + ".jpg");
        if (!file.getParentFile().exists()) file.getParentFile().mkdirs();
        Uri imageUri = Uri.fromFile(file);
        configCompress(getTakePhoto(), imageUri);

    }
    //相册选取
    public void openGallery() {
        file = new File(Environment.getExternalStorageDirectory(), "/temp/" + System.currentTimeMillis() + ".jpg");
        if (!file.getParentFile().exists()) file.getParentFile().mkdirs();
        Uri imageUri = Uri.fromFile(file);
        //configCompress(getTakePhoto(), imageUri);
        CompressConfig compressConfig = new CompressConfig.Builder().setMaxSize(50 * 1024).setMaxPixel(800).create();
        getTakePhoto().onEnableCompress(compressConfig, false);
        getTakePhoto().onPickFromGallery();


    }
    //显示选择方式的弹窗
    public void showPopWindow() {
        Log.e(TAG, "showPopWindow:------------- "+ 1);
        final View popView = LayoutInflater.from(this).inflate(
                R.layout.pop_window, null);
        popView.setFocusable(true);
        popView.setFocusableInTouchMode(true);
        Button btn1 = popView.findViewById(R.id.choice_photo);
        Button btn2 = popView.findViewById(R.id.take_photo);
        btn1.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View view) {
               openGallery();
               popupWindow.dismiss();
           }
       });
        btn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                  openCamera();
                  popupWindow.dismiss();
            }
        });

        popupWindow = new PopupWindow(popView,
                LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
        popupWindow.setFocusable(true);
        popupWindow.showAtLocation(popView, Gravity.BOTTOM | Gravity.LEFT, 0,
                0);
        Log.e(TAG, "showPopWindow:------------- "+ popupWindow+popView);

    }

    public void configCompress(TakePhoto takePhoto, Uri imageUri) {
        CompressConfig compressConfig = new CompressConfig.Builder().setMaxSize(50 * 1024).setMaxPixel(800).create();
        takePhoto.onEnableCompress(compressConfig, false);
        takePhoto.onPickFromCapture(imageUri);
    }

    @Override
    public void takeSuccess(TResult result) {
        super.takeSuccess(result);
        file = new File(result.getImage().getCompressPath());
        Glide.with(this).load(file).into(imageView);

    }
   //dang当控件点击的时候
   public void  onImgeViewClicked(ImageView imageView){
          this.imageView=imageView;
          showPopWindow();

   }
    @Override
    public void takeCancel() {
        super.takeCancel();
    }

    @Override
    public void takeFail(TResult result, String msg) {
        super.takeFail(result, msg);
    }

}
、、、、、、最后注明使用此基类需要导入两个依赖   如下:
compile 'com.jph.takephoto:takephoto_library:4.0.3'//拍照的依赖
compile 'com.github.bumptech.glide:glide:3.7.0'



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值