1、今天做开发,需要一个相册多选功能,然后就上网查了一下,看了有一个jar包,可以直接引用,就直接调用了,
com.yanzhenjie:album:1.0.0
本来想直接写一个左右循环移动的方法,但是发现有点小麻烦,由于工作紧就不做了,终于发现一个好的程序写完了是真不容易啊。好了先上图
代码下载地址:
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:0.9.12@aar'
//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(); //启动压缩