Как сказано в заголовке, я хочу щелкнуть по изображениям, отображаемым в моем виде сетки (который определяется путем выбора изображений с устройства), и просмотреть изображение в полноэкранном режиме.код для галереи:
public class Gallery extends AppCompatActivity {
private Button btn, Back;
int PICK_IMAGE_MULTIPLE = 1;
String imageEncoded;
List<String> imagesEncodedList;
private GridView gvGallery;
private GalleryAdapter galleryAdapter;
protected static ArrayList<Uri> ImagePaths = new ArrayList<Uri>();
private ArrayList<Integer> mSelected = new ArrayList<>();
private static final String TAG = "Gallery";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gallery);
btn = findViewById(R.id.btn);
Back = findViewById(R.id.svb);
gvGallery = (GridView) findViewById(R.id.gv);
for (int y = 0; y < ImagePaths.size(); y++) {
galleryAdapter = new GalleryAdapter(getApplicationContext(), ImagePaths);
gvGallery.setAdapter(galleryAdapter);
gvGallery.setVerticalSpacing(gvGallery.getHorizontalSpacing());
ViewGroup.MarginLayoutParams mlp = (ViewGroup.MarginLayoutParams) gvGallery
.getLayoutParams();
mlp.setMargins(0, gvGallery.getHorizontalSpacing(), 0, 0);
}
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setType("image/*");
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
intent.setAction(Intent.ACTION_OPEN_DOCUMENT);
startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_MULTIPLE);
}
});
Back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(Gallery.this, NewNoteActivity.class));
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
try {
// When an Image is picked
if (requestCode == PICK_IMAGE_MULTIPLE && resultCode == RESULT_OK
&& null != data) {
// Get the Image from data
Uri mImageUri;
String[] filePathColumn = {MediaStore.Images.Media.DATA};
imagesEncodedList = new ArrayList<String>();
if (data.getData() != null) {
mImageUri = data.getData();
// Get the cursor
Cursor cursor = getContentResolver().query(mImageUri,
filePathColumn, null, null, null);
// Move to first row
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
imageEncoded = cursor.getString(columnIndex);
cursor.close();
ImagePaths.add(mImageUri);
galleryAdapter = new GalleryAdapter(getApplicationContext(), ImagePaths);
gvGallery.setAdapter(galleryAdapter);
gvGallery.setVerticalSpacing(gvGallery.getHorizontalSpacing());
ViewGroup.MarginLayoutParams mlp = (ViewGroup.MarginLayoutParams) gvGallery
.getLayoutParams();
mlp.setMargins(0, gvGallery.getHorizontalSpacing(), 0, 0);
} else {
if (data.getClipData() != null) {
ClipData mClipData = data.getClipData();
ArrayList<Uri> mArrayUri = new ArrayList<Uri>();
for (int i = 0; i < mClipData.getItemCount(); i++) {
ClipData.Item item = mClipData.getItemAt(i);
Uri uri = item.getUri();
mArrayUri.add(uri);
// Get the cursor
Cursor cursor = getContentResolver().query(uri, filePathColumn, null, null, null);
// Move to first row
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
imageEncoded = cursor.getString(columnIndex);
imagesEncodedList.add(imageEncoded);
cursor.close();
}
for (int y = 0; y < mArrayUri.size(); y++) {
ImagePaths.add(mArrayUri.get(y));
galleryAdapter = new GalleryAdapter(getApplicationContext(), ImagePaths);
gvGallery.setAdapter(galleryAdapter);
gvGallery.setVerticalSpacing(gvGallery.getHorizontalSpacing());
ViewGroup.MarginLayoutParams mlp = (ViewGroup.MarginLayoutParams) gvGallery
.getLayoutParams();
mlp.setMargins(0, gvGallery.getHorizontalSpacing(), 0, 0);
}
}
}
} else {
Toast.makeText(this, "You haven't picked Image",
Toast.LENGTH_LONG).show();
}
} catch (Exception e) {
Toast.makeText(this, "Something went wrong", Toast.LENGTH_LONG)
.show();
}
super.onActivityResult(requestCode, resultCode, data);
}
}
, а код для адаптера, который помещает выбранные изображения в сетку, следующий:
public class GalleryAdapter extends BaseAdapter {
private Context ctx;
private int pos;
private LayoutInflater inflater;
private ImageView ivGallery;
ArrayList<Uri> mArrayUri;
public GalleryAdapter(Context ctx, ArrayList<Uri> mArrayUri) {
this.ctx = ctx;
this.mArrayUri = mArrayUri;
}
@Override
public int getCount() {
return mArrayUri.size();
}
@Override
public Object getItem(int position) {
return mArrayUri.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
pos = position;
inflater = (LayoutInflater) ctx
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View itemView = inflater.inflate(R.layout.gv_item, parent, false);
ivGallery = (ImageView) itemView.findViewById(R.id.ivGallery);
ivGallery.setImageURI(mArrayUri.get(position));
return itemView;
}
}
Ооо, и прежде чем кто-то скажет мне, что естьдругие те же вопросы с моим собственным, я знаю.Я попробовал все из них, и я не мог заставить вещи работать в моей собственной ситуации.
Я знаю, что хочу получить URI из выбранного изображения, чтобы я мог передать его другому созданному мною действию, которое делает его полноэкранным.Я просто не знаю, как его получить
Это то, что я пробовал.Но как я могу получить URI кликаемого изображения?
final Uri[] uri = {new Uri};
gvGallery.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v, int Uri,long id) {
// TODO Auto-generated method stub
uri[0] = (android.net.Uri) GalleryAdapter.getUri();
Intent intent =new Intent(getApplicationContext(),FullScreenActivity.class);
intent.setData(uri[0]);
startActivity(intent);
}
});
и внутри адаптера галереи
public Object getUri()
{
return mArrayUri;
}