在android教程应用程序上制作图像全屏

时间:2011-02-06 18:42:56

标签: android imageview

使用Hello,World Gridview教程示例,我试图在单击时使图像全屏,而不是在数组中显示图像的位置。由于我对Android不熟悉,这是我第一次尝试使用它,我很茫然。我虽然熟悉Java,但我尝试过这样的事情(显然不起作用):

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    GridView gridview = (GridView) findViewById(R.id.gridview);
    gridview.setAdapter(new ImageAdapter(this));

    gridview.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
            showImage(v, position);
            Toast.makeText(HelloAndroid.this, "" + parent.getId(), Toast.LENGTH_SHORT).show();
        }
    });
}

private void showImage(View view, int position) {
    ImageView imgView = (ImageView) view; 
    imgView.setImageResource(position);     
}

但应用程序崩溃(强制关闭)。有什么想法吗?

Here is the tutorial app I am using

2 个答案:

答案 0 :(得分:23)

imgView.setImageResource(position); 

这会给您一个错误,因为您没有正确使用它。该参数应该指向图像的资源ID(这是一个int),例如R.id.imageid。即使您要提供正确的资源ID,您想要做的也不会有效。

要获取正确的资源ID,您需要调用视图的适配器并使用getItemId(position)方法获取正确的资源ID。在您的ImageAdapter中,如果您将getItemId()方法更改为返回mThumbsIds[position]而不是0(如Google的示例中所示)。

但是,为了达到你的结果,我建议你创建一个新的Activity,然后加载这样的图像。

例如:

gridview.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
        long imageId = (ImageAdapter)parent.getAdapter.getItemAt(position);

        Intent fullScreenIntent = new Intent(v.getContext(), FullScreenImage.class);
        fullScreenIntent.putExtra(thisClassName.class.getName(), imageId);

        thisClassName.this.startActivity(fullScreenIntent);
    }
});

假设您创建了一个full_image.xml布局文件,其中只包含ID为"fullImage"的ImageView,则您的FullScreenImage类应如下所示:

public class FullScreenImage extends Activity
{
    protected void onCreate(Bundle savedInstanceState) {
        setContentView(R.layout.full_image);
        Intent intent = getIntent();
        long imageId = intent.getExtras().get(thisClassName.class.getName());
        ImageView imageView = (ImageView) v.findViewById(R.id.fullImage);

        imageView.setLayoutParams( new ViewGroup.LayoutParams(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT));

        imageView.setImageResource(imageId);
        imageView.setScaleType(ImageView.ScaleType.FIT_XY);
    }
}

这些方面的某些内容应该适合你,并进行一些调整。确保将AndroidManifest.xml文件中的FullScreenImage添加为<activity>

答案 1 :(得分:0)

在这里,您将获取点击的视图的ID (在view参数中传递)并使用它再次查找自己:

ImageView imgView = (ImageView) findViewById(view.getId()); 

这没有任何意义,特别是因为点击的视图显然 没有ID,导致findViewById返回null

您可能希望传递ImageView的ID:

ImageView imgView = (ImageView) findViewById(R.id.whatever_the_id_of_the_image_view_is);