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: List2、一定要记得在mainfest.xml中加入如下代码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) { // 用户取消选择。 // 根据需要提示用户取消了选择。 } } } }
<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三、顺道附上一个图片压缩框架,个人感觉还是挺好用的:photos = data.getStringArrayListExtra(PhotoPicker.KEY_SELECTED_PHOTOS); for(int i=0;i 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(); //启动压缩