Android studio从相册里面选图片无法选中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android studio从相册里面选图片无法选中相关的知识,希望对你有一定的参考价值。

参考技术A 该功能主要实现上传图片到服务器,选择图片的方式有两种,一种是从手机相册中选择,另一种是调用手机摄像头拍照。
1.从相册选择的图片会存储到 data 里面,而相机拍照的图片不会存储到 data 里面。
2.由于从相册选择的图片会存储到 data 里面,而相机拍照的图片不会存储到 data 里面,所以在获取图片资源进行回显的方式不同,请看一下详细代码:(一定要创建文件 createFileName())。

IOS多选单选相册图片

IOS多选单选相册图片

之前做项目让实现多选相册的图片,自己写了一个demo一直保存在电脑上,今天下午发现电脑128G的容量已经快没有了,准备清理电脑,所以把之前做的一些demo放在博客上,以后方便用。

1.首先准备3个图片

技术分享技术分享技术分享

2.定义单元格PhoCollectionViewCell

技术分享

技术分享
#import <UIKit/UIKit.h>  typedef void(^SelectBtnClickBlock) (BOOL isSelect);  @interface PhoCollectionViewCell : UICollectionViewCell  @property (weak ,nonatomic)  IBOutlet  UIImageView *  imageView;  @property (weak ,nonatomic)  IBOutlet  UIImageView *  selectImageView;  @property (nonatomic,copy) SelectBtnClickBlock selectBtnClickBlock;  - (IBAction)selectBtnClick:(id)sender;  @property (weak, nonatomic) IBOutlet UIButton *selectBtn;  @end
技术分享
技术分享
#import "PhoCollectionViewCell.h"  @implementation PhoCollectionViewCell  - (void)awakeFromNib {     // Initialization code      }  - (IBAction)selectBtnClick:(id)sender {     UIButton *btn=(UIButton *)sender;      btn.selected=!btn.selected;     NSLog(@"%@",@"aaaa");       _selectBtnClickBlock(btn.selected); } @end
技术分享

3.创建相片Model

技术分享
#import <Foundation/Foundation.h> #import <AssetsLibrary/ALAssetsLibrary.h>  @interface PhoModel : NSObject  @property(nonatomic,strong) ALAsset *asset; @property (nonatomic,assign) BOOL isSelected; @end
技术分享
#import "PhoModel.h"  @implementation PhoModel  @end

 

4.获取相册图片显示图片

技术分享
#import "ViewController.h" #import <AssetsLibrary/AssetsLibrary.h>  #import "AppDelegate.h" #import "PhoModel.h" #import "PhoCollectionViewCell.h"  #define ApplicationDelegate ((AppDelegate *)[UIApplication sharedApplication].delegate)  static NSInteger count = 0;  @interface ViewController () {     NSMutableArray *mutableAssets; } @property (weak, nonatomic) IBOutlet UICollectionView *collectionView;  @end  @implementation ViewController  - (void)viewDidLoad {     [super viewDidLoad];          //获取相册中的全部照片     [self getAllPictures];     [_collectionView registerNib: [UINib nibWithNibName:@"PhoCollectionViewCell" bundle:nil] forCellWithReuseIdentifier:@"CollectionViewCell"]; }  //获取相册中的全部照片 -(void)getAllPictures {     mutableAssets = [[NSMutableArray alloc]init];          NSMutableArray *assetURLDictionaries = [[NSMutableArray alloc] init];     NSMutableArray *assetGroups = [[NSMutableArray alloc] init];          __block NSMutableArray *tempMutableAssets = mutableAssets;     __block ViewController *tempSelf = self;     __block NSMutableArray *tempAssetGroups = assetGroups;          [ApplicationDelegate.library enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop){         if (group != nil) {             count = [group numberOfAssets];             __block int groupNum = 0;             [group enumerateAssetsUsingBlock:^(ALAsset *asset, NSUInteger index, BOOL *stop){                 if(asset != nil) {                     ++ groupNum;                     if([[asset valueForProperty:ALAssetPropertyType] isEqualToString:ALAssetTypePhoto]) {                         [assetURLDictionaries addObject:[asset valueForProperty:ALAssetPropertyURLs]];                         NSURL *url= (NSURL*) [[asset defaultRepresentation]url];                         NSLog(@"%@,%@",[asset valueForProperty:ALAssetPropertyDate],url);                          //                        [UIImage imageWithCGImage:[[result defaultRepresentation] fullScreenImage]];//图片 //                        [UIImage imageWithCGImage:[result thumbnail]];    //缩略图                                                  PhoModel *phoModel=[[PhoModel alloc]init];                         phoModel.asset=asset;                         phoModel.isSelected=NO;                         [tempMutableAssets addObject:phoModel];                         if (tempMutableAssets.count == groupNum) {                             [tempSelf allPhotosCollected:tempMutableAssets];                         }                     }                 }             }];             [tempAssetGroups addObject:group];         }     }failureBlock:^(NSError *error){         NSLog(@"There is an error");     }]; }  //所有asset -(void)allPhotosCollected:(NSMutableArray *)mutableAsset{     [self.collectionView reloadData]; }  #pragma mark -- UICollectionViewDataSource  - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {     CGSize itemSize = CGSizeMake(([UIScreen mainScreen].bounds.size.width-15)/4.0, ([UIScreen mainScreen].bounds.size.width-30)/4.0);     return itemSize; }  //定义展示的UICollectionViewCell的个数 -(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {     return mutableAssets.count+1; } //每个UICollectionView展示的内容 -(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {     static NSString * CellIdentifier = @"CollectionViewCell";     PhoCollectionViewCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath];     if (indexPath.row==0) {         cell.imageView.image = [UIImage imageNamed:@"0.png"];         cell.selectImageView.hidden=YES;         cell.selectBtnClickBlock=^(BOOL isSelect)         {             NSLog(@"cell1 block");         };         return cell;     }              PhoModel *phoModel = mutableAssets[indexPath.row-1];          cell.imageView.image = [UIImage imageWithCGImage:[phoModel.asset thumbnail]];          if (phoModel.isSelected) {         cell.selectImageView.image=[UIImage imageNamed:@"2.png"];     }     else     {         cell.selectImageView.image=[UIImage imageNamed:@"1.png"];     }     cell.selectImageView.hidden=NO;     cell.selectBtn.selected=phoModel.isSelected;     cell.selectBtnClickBlock=^(BOOL isSelect)     {         //单选多选标记 false 单选 true 多选         BOOL issangal=false;         if (issangal) {             for (PhoModel *tmpPhotoModel in mutableAssets) {                 tmpPhotoModel.isSelected = NO;             }         }         phoModel.isSelected=isSelect;         [_collectionView reloadData];     };          return cell; } - (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {     NSLog(@"%ld",indexPath.row); }  - (void)didReceiveMemoryWarning {     [super didReceiveMemoryWarning];     // Dispose of any resources that can be recreated. }  @end
技术分享

5.效果

技术分享

 

出处:http://www.cnblogs.com/5ishare/p/4832242.html

 

 

以上是关于Android studio从相册里面选图片无法选中的主要内容,如果未能解决你的问题,请参考以下文章

Android 图像选取 图片剪裁 照相选图 照相裁剪 大全 6-19更新

IOS多选单选相册图片

实现多选相册的图片 demo

相册系列:简单实现打开相册选图片功能

androidtheme添加图片

Android 仿QQ新浪相册的实现