将图像设置为背景Onclick Android

时间:2014-03-23 09:35:30

标签: android gridview onclick imageview

我正在开发一个项目,其中点击gridview中的图像在ImageView中打开该图像,我从此网站获取此代码http://www.androidhive.info/2012/02/android-gridview-layout-tutorial/,因此我修改了FullImageActivity.java并添加了一个按钮来设置图像作为背景,但每次我点击按钮,它只是强制关闭我的应用程序,PS我已经在清单中添加了权限

这是我的代码

package com.example.androidhive;

import java.io.IOException;
import android.app.Activity;
import android.app.WallpaperManager;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;

 public class FullImageActivity extends Activity {

 private WallpaperManager imageView;


@Override
 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.full_image);

    // get intent data
    Intent i = getIntent();

    // Selected image id
    int position = i.getExtras().getInt("id");
    ImageAdapter imageAdapter = new ImageAdapter(this);

    ImageView imageView = (ImageView) findViewById(R.id.full_image_view);
    imageView.setImageResource(imageAdapter.mThumbIds[position]);
    }


 public void setaswall(View view) { // SET AS WALLPAPER BUTTON
    // TODO Auto-generated method stub
     WallpaperManager myWallpaperManager
      = WallpaperManager.getInstance(getApplicationContext());
     try {
      Bitmap bitmap=((BitmapDrawable)imageView.getDrawable()).getBitmap();
      if(bitmap!=null)
      myWallpaperManager.setBitmap(bitmap);
     } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
     }

 }
 };

3 个答案:

答案 0 :(得分:0)

我想你也可能试图像这样使用它:

private ImageView mImageView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
   setContentView(R.layout.full_image);

    // get intent data
    Intent i = getIntent();

    // Selected image id
    int position = i.getExtras().getInt("id");
    ImageAdapter imageAdapter = new ImageAdapter(this);

    mImageView = (ImageView) findViewById(R.id.full_image_view);
    mImageView.setImageBitmap(BitmapFactory.decodeResource(getResources(), imageAdapter.mThumbIds[position]));
}

public void setaswall(View view) {
    WallpaperManager wm = WallpaperManager.getInstance(this);
    try {
        final Bitmap bitmap = ((BitmapDrawable) mImageView.getDrawable()).getBitmap();
        if (bitmap != null) {
            wm.setBitmap(bitmap);
        }
    } catch (final IOException e) {
        e.printStackTrace();
    }
}

并确保您已在AndroidManifest中包含设置壁纸权限。

 <uses-permission android:name="android.permission.SET_WALLPAPER"/>

答案 1 :(得分:0)

在此声明一个名为“imageView”的字段,但类型为WallpaperManager

private WallpaperManager imageView;

然后你声明一些本地的imageView:

ImageView imageView = (ImageView) findViewById(R.id.full_image_view);

最后,至少你要从你从未初始化的字段 imageView中获取Drawable:

Bitmap bitmap=((BitmapDrawable)imageView.getDrawable()).getBitmap();

这将引发一个异常,您稍后会捕获并打印stacktrace

==&GT; 解决方案:正确初始化 字段 imageView,不要创建隐藏字段的本地var。

答案 2 :(得分:0)

很简单我认为您可能忘记在您的清单文件中添加权限

只需在您的清单文件中添加

 <uses-permission android:name="android.permission.SET_WALLPAPER"/>