【问题标题】:Set image as Background Onclick Android将图像设置为背景 Onclick Android
【发布时间】:2014-03-23 09:35:30
【问题描述】:

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

这是我的代码

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();
     }

 }
 };

【问题讨论】:

  • 你已经看过logcat了吗?
  • 你能知道你的 logcat 是否有任何错误
  • 你想要这个项目吗?
  • 否,您的 logcat 中出现任何错误

标签: android gridview onclick imageview


【解决方案1】:

我想你可能也在尝试这样使用它:

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"/>

【讨论】:

  • 现在不是强制关闭也不能正常工作,我看不到壁纸管理器或任何壁纸
  • 是的,不要只删除这些行。我会再编辑一次。
【解决方案2】:

在这里您声明一个名为“imageView”但类型为WallpaperManager 的字段:

private WallpaperManager imageView;

然后你声明一些本地 imageView:

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

最后,你正试图从 field imageView 获取一个你从未初始化过的 Drawable:

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

这将引发一个异常,您稍后会捕获并打印堆栈跟踪

==> 解决方案:正确初始化字段 imageView,不要创建隐藏字段的本地变量。

【讨论】:

    【解决方案3】:

    这很简单,我想你可能忘了在你的 Mainfest 文件中添加权限

    只需将其添加到您的 Mainfest 文件中

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

    【讨论】:

    • 请说英语。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-24
    • 2015-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多