源代码地址:https://github.com/luoye123/Box

根据昨天写的弹窗呢,完成了显示手机图片并选择的功能。
闲话不多说了,上代码吧,因为代码有点多,我这着重于说一部分!

上一篇弹窗博客地址:http://blog.csdn.net/qq_30299305/article/details/72810252

1、Android6.0以上手机记得动态获取权限哦

private void requestPermission() {if (Build.VERSION.SDK_INT >= 23 && !isPermissionRequested) {isPermissionRequested = true;ArrayList<String> permissions = new ArrayList<>();if (checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {permissions.add(Manifest.permission.READ_EXTERNAL_STORAGE);}if (permissions.size() == 0) {return;} else {requestPermissions(permissions.toArray(new String[permissions.size()]), 0);}}
}

2、点击 从相册选取 跳转的图片显示页面:ImageActivity.java

public  class ImageActivity extends AppCompatActivity {//显示手机里的所有图片的列表控件
private GridView gridView;
//当手机里没有图片时,提示用户没有图片的控件
private TextView tv;
//gridView的adapter
private ImageGridViewAdapter gridImageAdapter;
//完成按钮
private Button okButton;
// 返回按钮
private Button back;
// 取消按钮
private Button cancel;
private Intent intent;
// 预览按钮
private Button preview;
private Context mContext;
private ArrayList<ImageBean> dataList;
private ImageHelper helper;
public static List<ImageBucket> contentList;
public static Bitmap bitmap;
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.plugin_camera_album);mContext = this;//注册一个广播,这个广播主要是用于在GalleryActivity进行预览时,防止当所有图片都删除完后,再回到该页面时被取消选中的图片仍处于选中状态IntentFilter filter = new IntentFilter("data.broadcast.action");registerReceiver(broadcastReceiver, filter);bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.plugin_camera_no_pictures);init();initListener();//这个函数主要用来控制预览和完成按钮的状态isShowOkBt();
}BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {//mContext.unregisterReceiver(this);// TODO Auto-generated method stubgridImageAdapter.notifyDataSetChanged();}
};// 预览按钮的监听
private class PreviewListener implements View.OnClickListener {public void onClick(View v) {if (Bimp.tempSelectBitmap.size() > 0) {intent.putExtra("position", "1");intent.setClass(ImageActivity.this, GalleryActivity.class);startActivity(intent);}}}// 完成按钮的监听
private class AlbumSendListener implements View.OnClickListener {public void onClick(View v) {finish();}}// 返回按钮监听
private class BackListener implements View.OnClickListener {public void onClick(View v) {return;}
}// 取消按钮的监听
private class CancelListener implements View.OnClickListener {public void onClick(View v) {Bimp.tempSelectBitmap.clear();finish();}
}// 初始化,给一些对象赋值
private void init() {helper = ImageHelper.getHelper();helper.init(getApplicationContext());contentList = helper.getImagesBucketList(false);dataList = new ArrayList<ImageBean>();for(int i = 0; i<contentList.size(); i++){dataList.addAll( contentList.get(i).imageList );}back = (Button) findViewById(R.id.back);cancel = (Button) findViewById(R.id.cancel);cancel.setOnClickListener(new CancelListener());back.setOnClickListener(new BackListener());preview = (Button) findViewById(R.id.preview);preview.setOnClickListener(new PreviewListener());intent = getIntent();Bundle bundle = intent.getExtras();gridView = (GridView) findViewById(R.id.myGrid);gridImageAdapter = new ImageGridViewAdapter(mContext,dataList,Bimp.tempSelectBitmap);gridView.setAdapter(gridImageAdapter);tv = (TextView) findViewById(R.id.myText);gridView.setEmptyView(tv);okButton = (Button) findViewById(R.id.ok_button);okButton.setText("完成"+"(" + Bimp.tempSelectBitmap.size()+ "/"+ 9+")");
}private void initListener() {gridImageAdapter.setOnItemClickListener(new ImageGridViewAdapter.OnItemClickListener() {@Overridepublic void onItemClick(final ToggleButton toggleButton,int position, boolean isChecked,Button chooseBt) {if (Bimp.tempSelectBitmap.size() >= 9) {toggleButton.setChecked(false);chooseBt.setVisibility(View.GONE);if (!removeOneData(dataList.get(position))) {Toast.makeText(ImageActivity.this, "超出可选图片张数", Toast.LENGTH_SHORT).show();}return;}if (isChecked) {chooseBt.setVisibility(View.VISIBLE);Bimp.tempSelectBitmap.add(dataList.get(position));okButton.setText("完成"+"(" + Bimp.tempSelectBitmap.size()+ "/"+ 9+")");} else {Bimp.tempSelectBitmap.remove(dataList.get(position));chooseBt.setVisibility(View.GONE);okButton.setText("完成"+"(" + Bimp.tempSelectBitmap.size() + "/"+ 9+")");}isShowOkBt();}});okButton.setOnClickListener(new AlbumSendListener());}private boolean removeOneData(ImageBean ImageBean) {if (Bimp.tempSelectBitmap.contains(ImageBean)) {Bimp.tempSelectBitmap.remove(ImageBean);okButton.setText("完成"+"(" +Bimp.tempSelectBitmap.size() + "/"+ 9+")");return true;}return false;
}public void isShowOkBt() {if (Bimp.tempSelectBitmap.size() > 0) {okButton.setText("完成"+"(" + Bimp.tempSelectBitmap.size() + "/"+ 9+")");preview.setPressed(true);okButton.setPressed(true);preview.setClickable(true);okButton.setClickable(true);okButton.setTextColor(Color.WHITE);preview.setTextColor(Color.WHITE);} else {okButton.setText("完成"+"(" + Bimp.tempSelectBitmap.size() + "/"+ 9+")");preview.setPressed(false);preview.setClickable(false);okButton.setPressed(false);okButton.setClickable(false);okButton.setTextColor(Color.parseColor("#E1E0DE"));preview.setTextColor(Color.parseColor("#E1E0DE"));}
}public boolean onKeyDown(int keyCode, KeyEvent event) {if (keyCode == KeyEvent.KEYCODE_BACK) {finish();}return false;}
@Override
protected void onRestart() {isShowOkBt();super.onRestart();
}

}

3、以及对应的activity_image.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent" android:background="#E1E0DE"><RelativeLayoutandroid:id="@+id/headview"android:layout_width="fill_parent"android:layout_height="45dp"android:background="@drawable/plugin_camera_title_bar"android:gravity="center_vertical"android:layout_marginBottom="3dp"><Buttonandroid:layout_width="60dp"android:layout_height="wrap_content"android:textSize="14sp"android:textColor="#fff"android:id="@+id/back"android:text="相册"android:background="@drawable/plugin_camera_title_btn_back"android:layout_marginTop="5dp"android:layout_marginBottom="5dp"android:layout_centerVertical="true"/><Buttonandroid:layout_width="67dp" android:layout_height="wrap_content"android:textSize="14sp"android:textColor="#fff"android:id="@+id/cancel"android:text="取消"android:background="@drawable/plugin_camera_title_btn_cancel"android:layout_centerVertical="true"android:layout_marginRight="5dp"android:layout_alignParentRight="true" />
</RelativeLayout><RelativeLayoutandroid:id="@+id/bottom_layout"android:layout_width="match_parent"android:layout_height="50dp"android:layout_alignParentBottom="true"android:background="@drawable/plugin_camera_bottom_bar"android:layout_marginTop="3dp"><Buttonandroid:id="@+id/preview"android:layout_width="90dp"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:layout_centerVertical="true"android:layout_marginLeft="10dp"android:text="预览"android:background="@drawable/plugin_camera_title_btn_preview"/><Buttonandroid:id="@+id/ok_button"android:layout_width="90dp"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:layout_centerVertical="true"android:layout_marginRight="10dp"android:background="@drawable/plugin_camera_ok_btn_state"/>
</RelativeLayout><GridViewandroid:id="@+id/myGrid"android:layout_width="fill_parent"android:layout_height="fill_parent"android:layout_above="@id/bottom_layout"android:layout_below="@id/headview"android:layout_centerInParent="true"android:layout_marginTop="2dp"android:horizontalSpacing="10dp"android:numColumns="4"android:verticalSpacing="10dp"android:background="#E1E0DE" />
<TextViewandroid:id="@+id/myText"android:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"android:text="相册没有图片"android:textColor="#000"/></RelativeLayout>

东西太多,就不一 一讲述了,有兴趣的话,可以通过上面源码地址下载来进行研究。

Android开发选取相册多张图片相关推荐

  1. android 从相册选择,Android开发从相册中选取照片

    最近项目在做一个功能:就是需要从用户选择头像跳转到相册选择图片,这应该是一个很简单的需求,但是在网上搜了一下有好多都讲的很乱,其实用几十行代码就可以实现的为什么要说的那么复杂呢,下面就简单说一下喽. ...

  2. Android相册中搜索功能,Android开发从相册中选取照片的示例代码

    最近项目在做一个功能:就是需要从用户选择头像跳转到相册选择图片,这应该是一个很简单的需求,但是在网上搜了一下有好多都讲的很乱,其实用几十行代码就可以实现的为什么要说的那么复杂呢,下面就简单说一下喽. ...

  3. android开发 获取相册名称_android通过拍照、相册获取图片并显示 实例完整源码下载(亲测通过)...

    [实例简介]其中也包含了 将图片保存至 sd卡功能 [实例截图] [核心代码] public class MainActivity extends Activity{ private static f ...

  4. android开发 获取相册名称_Android开发之获取相册照片和获取拍照照片

    在Android的开发过程中,我们可能会读取手机里面的照片或者通过相机拍摄获取照片,这是两种常用的获取图片的方式,在做项目过程中也会经常遇到,下面来介绍一下这两种获取方式.. 1.从本地相册获取照片: ...

  5. 微信小程序开发选取相册照片/拍照API调用

    作者最近在探索微信小程序,有一个需求是让用户通过手机相册或者手机摄像头拍照上传图片.效果如下图所示: 由于作者之前没有接触过微信小程序,看了微信小程序的开发手册后就开始写了. 一开始的想法是这样的: ...

  6. android开发 获取相册名称_Android获取手机上各个相册名称和相片的方法

    下面是我用来获取相册名称以及内容的方法,比较猥琐的方法,但是也实现了功能 就是一个asyctask,将就参考参考,本人记录 class ScanAllImageTask extends android ...

  7. android studio小案例代码,AndroidStudio开发小相册实例

    郑州app开发AndroidStudio开发小相册实例代码如下. 布局代码如下: java代码如下: package cn.xhhkj.xhhkjtest; import android.app.Ac ...

  8. Android开发笔记(一百二十四)自定义相册

    画廊Gallery Gallery是一个早期的画廊控件,左右滑动手势可展示内嵌的图片列表,类似于一个平面的万花筒.虽然Android现在将Gallery标记为Deprecation(表示已废弃),建议 ...

  9. Android开发 调用系统相机相册图片功能,解决小米手机拍照或者图片横竖相反问题,及小米手机相册图片路径问题

    Android开发 调用系统相机相册图片功能,解决小米手机拍照或者图片横竖相反问题,及小米手机相册图片路径问题 1.调用相机,兼容7.0 AndroidManifest配置 <providera ...

最新文章

  1. 【C++自我精讲】基础系列二 const
  2. iOS架构-静态库.a打包之资源文件打包成bundle(4)
  3. 陈国良、孙永强教授获中国计算机学会「终身成就奖」,为国内并行算法和编译技术先驱...
  4. htmltest~计算器界面的实现
  5. 单载波调制和OFDM调制比较
  6. hadoop分布式文件系统hdfs的概念和特性
  7. 10个常用的Python图像处理工具,建议收藏!
  8. wxWidgets:wxSearchCtrl类用法
  9. 线性表的定义与操作-顺序表,链式表(C语言)
  10. php的添加语句怎么写,php修改语句怎么写
  11. 计算机应用与技术大赛,关于举办2017年燕山大学第一届计算机应用技术与程序设计大赛的通知...
  12. Android学习之Android 5.0分享动画实现微信点击全屏效果
  13. VMware、vSphere 6.0 介绍
  14. C#6.0VISUALSTUDIO 2015 C#入门经典 第7版pdf
  15. Mysql之1050错误解决办法
  16. 华为ensp命令大全_从零开始学习华为路由交换 | 配置接口IP
  17. 十六、算术编码_2、算术编码举例实现
  18. 改编码格式_CAD多行文字编码讲解
  19. php与drupal,什么是Drupal
  20. 说明:最新谷歌AI智商不超过6岁研究来自科学院而非康内尔大学

热门文章

  1. Java中final、static关键字的作用
  2. 双目立体匹配算法SGM步骤拆解
  3. 第一本书《java面向对象总结》
  4. 魅蓝s6 android系统版本,魅蓝s6什么时候上市
  5. 查看html元素,认识html元素
  6. matlab画外框_在MATLAB符号计算中,y的二阶导数表示为(      )。
  7. 几种常用的CSS居中方法,几行代码很简单
  8. python彩色字体_Python 打印彩色字体
  9. vue+css左边三角形的矩形完成自定义流程图(可扩展)
  10. 如何创建高效的Prompt和ChatGPT等大语言模型AI对话