使用新activity如何在Gridview中点击图片放大?
How to enlarge a picture in Gridview when it is clicked using a new activity?
所以我有一个 activity 来膨胀 GridView,我希望它可以点击,点击后,它会打开一个新的 activity,显示整个图像以及一些文本我在另一个 activity 中写过。注意确认写入的txt文件写入成功,并且在SD卡中
这是 GridView 的代码 activity
public class GridView extends AppCompatActivity {
android.widget.GridView gv;
ArrayList<File> list,list2;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.gallery);
File dir = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/MyCameraApp");
File dir2 = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/MyCameraApp");
list = imageReader(dir);
list2 = locationReader(dir2);
gv = (android.widget.GridView) findViewById(R.id.gridView);
gv.setAdapter(new GridAdapter());
gv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent(GridView.this, ViewImage.class);
intent.putExtra("MyImage", list.get(position));
intent.putExtra("MyLocation", list2.get(position));
startActivity(intent);
//startActivity(new Intent(getApplicationContext(), ViewImage.class).putExtra("img",list.get(position)));
}
});
}
public void BackToMain(View view) {
Intent backToMain = new Intent(this, MainActivity.class);
startActivity(backToMain);
}
class GridAdapter extends BaseAdapter{
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView = getLayoutInflater().inflate(R.layout.simple_grid, parent, false);
ImageView iv = (ImageView) convertView.findViewById(R.id.imageView);
iv.setImageURI(Uri.parse(getItem(position).toString()));
return convertView;
}
}
ArrayList<File> imageReader(File root){
ArrayList<File> a = new ArrayList<>();
File[] files = root.listFiles();
for(int i = 0; i < files.length; i++){
if(files[i].isDirectory()){
}
else
{
if(files[i].getName().endsWith(".jpg")){
a.add(files[i]);
}
}
}
return a;
}
ArrayList<File> locationReader(File root){
ArrayList<File> a = new ArrayList<>();
File[] files = root.listFiles();
for(int i = 0; i < files.length; i++){
if(files[i].isDirectory()){
}
else
{
if(files[i].getName().endsWith(".txt")){
a.add(files[i]);
}
}
}
return a;
}
}
这是由 GridView 调用的 activity,它应该显示图像并打开我之前写入的文件,并显示其内容(字符串)。
public class ViewImage extends AppCompatActivity {
ImageView imageView;
TextView textView;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.view_image);
// int image = getIntent().getExtras().getInt("MyImage", R.drawable.common_google_signin_btn_text_light);
int image = getIntent().getIntExtra("MyImage", R.drawable.cast_ic_notification_0);
ImageView imageView = (ImageView) findViewById(R.id.imageView2);
imageView.setImageResource(image);
Intent calledActivity = getIntent();
String pos = calledActivity.getExtras().getString("MyLocation");
textView = (TextView) findViewById(R.id.text_location);
textView.setText(pos);
}
public void BackToCamera(View view) {
Intent intent = new Intent(ViewImage.this, MainActivity.class);
startActivity(intent);
}
}
现在,我所看到的只是 R.drawable.cast_ic_notification_0 作为图片,而不是 GridView 的图像。另外,TextView 是空的,我使用了调试器,它显示
String pos = calledActivity.getExtras().getString("MyLocation");
位置为空。请帮忙!
list.get(position)
是一个文件,您正试图将其读取为 getExtras().getInt()
我认为您应该将文件路径作为字符串传递:
intent.putExtra("MyImage", list.get(position).getAbsolutePath());
并收到它:
File imgFile = new File(getIntent().getStringExtra("MyImage"));
if(imgFile.exists()){
Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
ImageView imageView = (ImageView) findViewById(R.id.imageView2);
imageView.setImageBitmap(myBitmap);
}
所以我有一个 activity 来膨胀 GridView,我希望它可以点击,点击后,它会打开一个新的 activity,显示整个图像以及一些文本我在另一个 activity 中写过。注意确认写入的txt文件写入成功,并且在SD卡中
这是 GridView 的代码 activity
public class GridView extends AppCompatActivity {
android.widget.GridView gv;
ArrayList<File> list,list2;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.gallery);
File dir = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/MyCameraApp");
File dir2 = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/MyCameraApp");
list = imageReader(dir);
list2 = locationReader(dir2);
gv = (android.widget.GridView) findViewById(R.id.gridView);
gv.setAdapter(new GridAdapter());
gv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent(GridView.this, ViewImage.class);
intent.putExtra("MyImage", list.get(position));
intent.putExtra("MyLocation", list2.get(position));
startActivity(intent);
//startActivity(new Intent(getApplicationContext(), ViewImage.class).putExtra("img",list.get(position)));
}
});
}
public void BackToMain(View view) {
Intent backToMain = new Intent(this, MainActivity.class);
startActivity(backToMain);
}
class GridAdapter extends BaseAdapter{
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView = getLayoutInflater().inflate(R.layout.simple_grid, parent, false);
ImageView iv = (ImageView) convertView.findViewById(R.id.imageView);
iv.setImageURI(Uri.parse(getItem(position).toString()));
return convertView;
}
}
ArrayList<File> imageReader(File root){
ArrayList<File> a = new ArrayList<>();
File[] files = root.listFiles();
for(int i = 0; i < files.length; i++){
if(files[i].isDirectory()){
}
else
{
if(files[i].getName().endsWith(".jpg")){
a.add(files[i]);
}
}
}
return a;
}
ArrayList<File> locationReader(File root){
ArrayList<File> a = new ArrayList<>();
File[] files = root.listFiles();
for(int i = 0; i < files.length; i++){
if(files[i].isDirectory()){
}
else
{
if(files[i].getName().endsWith(".txt")){
a.add(files[i]);
}
}
}
return a;
}
}
这是由 GridView 调用的 activity,它应该显示图像并打开我之前写入的文件,并显示其内容(字符串)。
public class ViewImage extends AppCompatActivity {
ImageView imageView;
TextView textView;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.view_image);
// int image = getIntent().getExtras().getInt("MyImage", R.drawable.common_google_signin_btn_text_light);
int image = getIntent().getIntExtra("MyImage", R.drawable.cast_ic_notification_0);
ImageView imageView = (ImageView) findViewById(R.id.imageView2);
imageView.setImageResource(image);
Intent calledActivity = getIntent();
String pos = calledActivity.getExtras().getString("MyLocation");
textView = (TextView) findViewById(R.id.text_location);
textView.setText(pos);
}
public void BackToCamera(View view) {
Intent intent = new Intent(ViewImage.this, MainActivity.class);
startActivity(intent);
}
}
现在,我所看到的只是 R.drawable.cast_ic_notification_0 作为图片,而不是 GridView 的图像。另外,TextView 是空的,我使用了调试器,它显示
String pos = calledActivity.getExtras().getString("MyLocation");
位置为空。请帮忙!
list.get(position)
是一个文件,您正试图将其读取为 getExtras().getInt()
我认为您应该将文件路径作为字符串传递:
intent.putExtra("MyImage", list.get(position).getAbsolutePath());
并收到它:
File imgFile = new File(getIntent().getStringExtra("MyImage"));
if(imgFile.exists()){
Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
ImageView imageView = (ImageView) findViewById(R.id.imageView2);
imageView.setImageBitmap(myBitmap);
}