缩略图与 gridview 中的实际图像不同
thumbnail different from actual image in gridview
我在 android 中创建了一个简单的 GridView 应用程序,单击时图像会在新的 window 中全屏打开。
应用图片:
我也在getView方法里放了随机图片生成代码如下在ImageAdapter Class:
@Override
public View getView(int arg0, View arg1, ViewGroup arg2) {
ImageView iv;
shuffleArray(images);
if(arg1!=null){
iv=(ImageView)arg1;
}else{
iv=new ImageView(context);
iv.setLayoutParams(new GridView.LayoutParams(80,80)); //resizing the picture according to the params
iv.setScaleType(ScaleType.CENTER_CROP);//images will be cropped towards center
iv.setPadding(8, 8, 8, 8); //padding of all sides if images vary then less padding more crop to fit imageview
}
iv.setImageResource( images[arg0]);
return iv;
}
static void shuffleArray(int[] images2) {
// TODO Auto-generated method stub
Random rnd=new Random();
for(int i=images2.length-1;i>=0;i--){
int index=rnd.nextInt(i+1);
int temp=images2[index];
images2[index]=images2[i];
images2[i]=temp;
}
}
每次我打开应用程序时,图片都会出现一些问题。
现问题如下:
每当我点击图像缩略图时,都会在
新 window .
同一图像缩略图在 GridView 中显示两个或多个 Activity
不同的图像。
- 我也在尝试设置一个条件,即 运行 应用程序应该
禁用所有硬件按钮
AND
- 每当用户 点击 特定数量的图像时,应用程序应该
自动关闭并显示消息 .
如何实现上述问题的解决 ?
我的整个源代码:
主要Activity.java
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
GridView gv=(GridView)findViewById(R.id.gridView);
gv.setAdapter(new ImageAdapter(getApplicationContext()));
gv.setOnItemClickListener(new OnItemClickListener(){
private boolean[] isSpecificImage;{
isSpecificImage[0]=true;
}
@Override
public void onItemClick(AdapterView<?> parentView, View iv, int position, long id) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(), ""+position, Toast.LENGTH_SHORT).show();
Intent i=new Intent(getApplicationContext(),ImageDetail.class); // for click open that image as new activity
i.putExtra("id", position);
startActivity(i);
}
});
ImageAdapter class
public class ImageAdapter extends BaseAdapter {
私有上下文上下文;
public static int[] 图片={
R.drawable.goku,R.drawable.gohan,R.drawable.vegeta,R.drawable.broly,R.drawable.buu
};
public ImageAdapter(Context applicationContext) {
context = applicationContext;
shuffleArray(images);
}
@Override
public int getCount() {
// no of items to be displayed
return images.length;
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int arg0, View arg1, ViewGroup arg2) {
ImageView iv;
if(arg1!=null){
iv=(ImageView)arg1;
}else{
iv=new ImageView(context);
iv.setLayoutParams(new GridView.LayoutParams(80,80)); //resizing the picture according to the params
iv.setScaleType(ScaleType.CENTER_CROP);//images will be cropped towards center
iv.setPadding(8, 8, 8, 8); //padding of all sides if images vary then less padding more crop to fit imageview
}
iv.setImageResource( images[arg0]);
return iv;
}
void shuffleArray(int[] images2) {
// TODO Auto-generated method stub
Random rnd=new Random();
for(int i=images2.length-1;i>=0;i--){
int index=rnd.nextInt(i+1);
int temp=images2[index];
images2[index]=images2[i];
images2[i]=temp;
}
}
}
ImageDetail class
public class ImageDetail extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.imagedetail);
Intent i=getIntent();
int position =(Integer) i.getExtras().get("id");
ImageView iv=(ImageView)findViewById(R.id.ivdbz);
iv.setImageResource(ImageAdapter.images[position]);
}
}
shuffleArray(images);
该语句不属于 getView()
。您不应该在每次调用 getView() 时都随机播放。
在别处调用它。
那么你可以使用 OnClick ItemListener 中的位置来放置 finish()
gridView 中的条件
我在 android 中创建了一个简单的 GridView 应用程序,单击时图像会在新的 window 中全屏打开。
应用图片:
我也在getView方法里放了随机图片生成代码如下在ImageAdapter Class:
@Override
public View getView(int arg0, View arg1, ViewGroup arg2) {
ImageView iv;
shuffleArray(images);
if(arg1!=null){
iv=(ImageView)arg1;
}else{
iv=new ImageView(context);
iv.setLayoutParams(new GridView.LayoutParams(80,80)); //resizing the picture according to the params
iv.setScaleType(ScaleType.CENTER_CROP);//images will be cropped towards center
iv.setPadding(8, 8, 8, 8); //padding of all sides if images vary then less padding more crop to fit imageview
}
iv.setImageResource( images[arg0]);
return iv;
}
static void shuffleArray(int[] images2) {
// TODO Auto-generated method stub
Random rnd=new Random();
for(int i=images2.length-1;i>=0;i--){
int index=rnd.nextInt(i+1);
int temp=images2[index];
images2[index]=images2[i];
images2[i]=temp;
}
}
每次我打开应用程序时,图片都会出现一些问题。
现问题如下:
每当我点击图像缩略图时,都会在 新 window .
同一图像缩略图在 GridView 中显示两个或多个 Activity 不同的图像。
- 我也在尝试设置一个条件,即 运行 应用程序应该 禁用所有硬件按钮
AND
- 每当用户 点击 特定数量的图像时,应用程序应该 自动关闭并显示消息 .
如何实现上述问题的解决 ?
我的整个源代码: 主要Activity.java
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
GridView gv=(GridView)findViewById(R.id.gridView);
gv.setAdapter(new ImageAdapter(getApplicationContext()));
gv.setOnItemClickListener(new OnItemClickListener(){
private boolean[] isSpecificImage;{
isSpecificImage[0]=true;
}
@Override
public void onItemClick(AdapterView<?> parentView, View iv, int position, long id) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(), ""+position, Toast.LENGTH_SHORT).show();
Intent i=new Intent(getApplicationContext(),ImageDetail.class); // for click open that image as new activity
i.putExtra("id", position);
startActivity(i);
}
});
ImageAdapter class
public class ImageAdapter extends BaseAdapter {
私有上下文上下文; public static int[] 图片={ R.drawable.goku,R.drawable.gohan,R.drawable.vegeta,R.drawable.broly,R.drawable.buu };
public ImageAdapter(Context applicationContext) {
context = applicationContext;
shuffleArray(images);
}
@Override
public int getCount() {
// no of items to be displayed
return images.length;
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int arg0, View arg1, ViewGroup arg2) {
ImageView iv;
if(arg1!=null){
iv=(ImageView)arg1;
}else{
iv=new ImageView(context);
iv.setLayoutParams(new GridView.LayoutParams(80,80)); //resizing the picture according to the params
iv.setScaleType(ScaleType.CENTER_CROP);//images will be cropped towards center
iv.setPadding(8, 8, 8, 8); //padding of all sides if images vary then less padding more crop to fit imageview
}
iv.setImageResource( images[arg0]);
return iv;
}
void shuffleArray(int[] images2) {
// TODO Auto-generated method stub
Random rnd=new Random();
for(int i=images2.length-1;i>=0;i--){
int index=rnd.nextInt(i+1);
int temp=images2[index];
images2[index]=images2[i];
images2[i]=temp;
}
}
}
ImageDetail class
public class ImageDetail extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.imagedetail);
Intent i=getIntent();
int position =(Integer) i.getExtras().get("id");
ImageView iv=(ImageView)findViewById(R.id.ivdbz);
iv.setImageResource(ImageAdapter.images[position]);
}
}
shuffleArray(images);
该语句不属于 getView()
。您不应该在每次调用 getView() 时都随机播放。
在别处调用它。
那么你可以使用 OnClick ItemListener 中的位置来放置 finish()
gridView 中的条件