Android图片选择框架

1、今天做开发,需要一个相册多选功能,然后就上网查了一下,看了有一个jar包,可以直接引用,就直接调用了,

com.yanzhenjie:album:1.0.0
本来想直接写一个左右循环移动的方法,但是发现有点小麻烦,由于工作紧就不做了,终于发现一个好的程序写完了是真不容易啊。好了先上图

代码下载地址:http://download.csdn.net/download/f552126367/10235625

1、代码说明

package portal.wpms.com.albumtest;

import android.content.ContentResolver;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.yanzhenjie.album.Album;

import org.w3c.dom.Text;

import java.util.List;

public class MainActivity extends AppCompatActivity {
    private ImageView picture_show;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        picture_show=findViewById(R.id.picture_show);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Album.startAlbum(MainActivity.this, 1001,9,
                        ContextCompat.getColor(MainActivity.this, R.color.colorPrimary),
                        ContextCompat.getColor(MainActivity.this, R.color.colorPrimaryDark));  // 指定状态栏的颜色。
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    // 1. 使用默认风格,并指定选择数量:
// 第一个参数Activity/Fragment; 第二个request_code; 第三个允许选择照片的数量,不填可以无限选择。
// Album.startAlbum(this, ACTIVITY_REQUEST_SELECT_PHOTO, 9);

// 2. 使用默认风格,不指定选择数量:
// Album.startAlbum(this, ACTIVITY_REQUEST_SELECT_PHOTO); // 第三个参数不填的话,可以选择无数个。

// 3. 指定风格,并指定选择数量,如果不想限制数量传入Integer.MAX_VALUE;

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == 1001) {
            if (resultCode == RESULT_OK) { // 判断是否成功。
                try{
                    // 拿到用户选择的图片路径List                    List<String> pathList = Album.parseResult(data);
                    ContentResolver cr = this.getContentResolver();
                    Toast.makeText(MainActivity.this,"___"+pathList.get(0),Toast.LENGTH_SHORT).show();
                    Uri uri = Uri.parse(pathList.get(0));
                    Bitmap bitmap = BitmapFactory.decodeFile(pathList.get(0));
                    picture_show.setImageBitmap(bitmap);
                /* Bitmap设定到ImageView */
                }catch (Exception e){
                    e.printStackTrace();
                }
            } else if (resultCode == RESULT_CANCELED) { // 用户取消选择。
                // 根据需要提示用户取消了选择。
            }
        }
    }
}
2、一定要记得在mainfest.xml中加入如下代码

<activity
    android:name="com.yanzhenjie.album.AlbumActivity"
    android:label="图库"
    android:configChanges="orientation|keyboardHidden|screenSize"
    android:theme="@style/Theme.AppCompat.Light.NoActionBar"
    android:windowSoftInputMode="stateAlwaysHidden|stateHidden" />
3、加载的包

dependencies {
    compile 'com.android.support:appcompat-v7:26.+'
    compile 'com.android.support:design:26.+'
    compile fileTree(dir: 'libs', include: '*.jar')
    /*图片多选框架*/
    compile 'com.yanzhenjie:album:1.0.0'
    /*图片不内存溢出的显示方法*/
    compile 'com.facebook.fresco:fresco:0.14.0'
    //LuBan图片压缩
    compile 'io.reactivex:rxandroid:1.2.1'
    compile 'io.reactivex:rxjava:1.1.6'
    compile 'top.zibin:Luban:1.0.5'

}

二、上面的相册实现功能虽然也基本满足条件,但是感觉相册选择框架PhotoPicker更好一些


1、

/*图片多选框架*/
compile 'me.iwf.photopicker:PhotoPicker:[email protected]'
//glide图片加载框架
compile 'com.github.bumptech.glide:glide:4.1.1'

2、androidMainfest中加入

<activity android:name="me.iwf.photopicker.PhotoPickerActivity"
    android:theme="@style/Theme.AppCompat.NoActionBar"
    />

<activity android:name="me.iwf.photopicker.PhotoPagerActivity"
    android:theme="@style/Theme.AppCompat.NoActionBar"/>

3、调用方式

PhotoPicker.builder()
        .setPhotoCount(1)
        .setShowCamera(true)
        .setShowGif(true)
        .setPreviewEnabled(false)
        .start(CustomInfoActivity.this, PhotoPicker.REQUEST_CODE);
4、回调函数
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // get selected images from selector
    if (resultCode == RESULT_OK && requestCode == PhotoPicker.REQUEST_CODE) {
        if(resultCode == RESULT_OK) {
            ArrayList<String> photos =
                    data.getStringArrayListExtra(PhotoPicker.KEY_SELECTED_PHOTOS);
            for(int i=0;i<photos.size();i++){
                String a1=photos.get(i);
                showToast(a1);
            }
        }
    }
    super.onActivityResult(requestCode, resultCode, data);
}
三、顺道附上一个图片压缩框架,个人感觉还是挺好用的:
compile 'top.zibin:Luban:1.0.5'

(2)、调用方式:

Luban.get(this)
        .load(picFileList.get(index))                     //传人要压缩的图片
        .putGear(Luban.THIRD_GEAR)      //设定压缩档次,默认三挡
        .setCompressListener(new OnCompressListener() { //设置回调
            @Override
            public void onStart() {
                //ToastUtil.showShort(JournalDetailActivity.this,"开始压缩图片");
                //压缩开始前调用,可以在方法内启动 loading UI
            }
            @Override
            public void onSuccess(File file) {
                // 压缩成功后调用,返回压缩后的图片文件
                try{
                    FileInputStream fis=new FileInputStream(file);
                    BufferedInputStream bis=new BufferedInputStream(fis);
                    // 生成一个图片文件名
                    String fileName = String.valueOf(System.currentTimeMillis());
                    path=FileUtils.SDPATH + "/"+fileName+".jpg";
                    FileOutputStream fos=new FileOutputStream(new File(path));
                    byte[] buffer=new byte[1024*1024];//这是自定义java缓冲区
                    int len=0;
                    while((len=bis.read(buffer))>0){//
                        fos.write(buffer, 0, len);//貌似直接就调用了io的底层
                    }
                    fis.close();
                    fos.close();
                    File fi1=new File(path);
                    //将选择的图片保存至集合
                    String[] fileString1 = new String[5];
                    fileString1[0]=fileName + ".jpg";
                    fileString1[1]=Helper.ShowLongFileSzie(fi1.length());
                    fileString1[2]=path;
                    fileString1[3]="";
                    fileString1[4]=Helper.getUUID();//主键
                    pictureList.add(fileString1);
                    if(index==picFileList.size()){
                        showPicturelist();
                    }

                }catch (Exception e){
                    Helper.saveFileLog("JournalDetailActivity_PHOTOTAKE___"+e.toString());
                    Intent intent =new Intent();
                    IntentJumpHelper.IntentJump(intent,JournalDetailActivity.this,IndexActivity.class,0);
                }
            }
            @Override
            public void onError(Throwable e) {
                // 当压缩过去出现问题时调用
                ToastUtil.showShort(JournalDetailActivity.this,"压缩图片失败");
            }
        }).launch();    //启动压缩