壁纸不适合设备屏幕
Posted
技术标签:
【中文标题】壁纸不适合设备屏幕【英文标题】:Wallpaper not properly fit on device screen 【发布时间】:2014-05-10 15:52:14 【问题描述】:我在一个可绘制文件夹中有一组图像。我有一个按钮可以将图像设置为设备屏幕上的墙纸。但是当我将此图像设置为墙纸时,它要么缩放要么裁剪。我希望图像应该适合屏幕尺寸。我在 SO 上看到了很多链接,但没有一个链接对我有用。这是我目前正在尝试的代码。
代码-
Bitmap bmap2 = BitmapFactory.decodeStream(getResources().openRawResource(mThumb[position]));
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int height = metrics.heightPixels;
int width = metrics.widthPixels;
Bitmap bitmap = Bitmap.createScaledBitmap(bmap2, width, height, true);
WallpaperManager wallpaperManager = WallpaperManager.getInstance(this);
try
wallpaperManager.setBitmap(bitmap);
catch (IOException e)
e.printStackTrace();
我还在清单中添加了以下几行-
<uses-permission android:name="android.permission.SET_WALLPAPER_HINTS"/>
<uses-permission android:name="android.permission.SET_WALLPAPER" />
【问题讨论】:
我也面临同样的缩放壁纸问题。你找到什么解决方案请帮我解决这个[问题] (***.com/questions/32201161/…) .... 【参考方案1】:您好,这是我检查过的可绘制图像..
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int height = metrics.heightPixels;
int width = metrics.widthPixels;
Bitmap tempbitMap = BitmapFactory.decodeResource(getResources(), R.drawable.img);
Bitmap bitmap = Bitmap.createScaledBitmap(tempbitMap,width,height, true);
WallpaperManager wallpaperManager = WallpaperManager.getInstance(MainActivity.this);
wallpaperManager.setWallpaperOffsetSteps(1, 1);
wallpaperManager.suggestDesiredDimensions(width, height);
try
wallpaperManager.setBitmap(bitmap);
catch (IOException e)
e.printStackTrace();
还要在 Manifest.xml 中提及这些权限..
<uses-permission android:name="android.permission.SET_WALLPAPER_HINTS" />
<uses-permission android:name="android.permission.SET_WALLPAPER" />
这是截图..
要重置屏幕的适合壁纸,请将图像路径存储在共享首选项中并使用 Boot Completed Receiver 然后重置屏幕上的相同壁纸....
广播接收器是..
import java.io.IOException;
import android.app.WallpaperManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.WindowManager;
public class BootReceiver extends BroadcastReceiver
private static final String TAG="BootReceiver";
@Override public void onReceive(Context context,Intent intent)
try
DisplayMetrics metrics = new DisplayMetrics();
WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
windowManager.getDefaultDisplay().getMetrics(metrics);
int height = metrics.heightPixels;
int width = metrics.widthPixels;
Bitmap tempbitMap = BitmapFactory.decodeResource(context.getResources(), R.drawable.img);
Bitmap bitmap = Bitmap.createScaledBitmap(tempbitMap,width,height, true);
WallpaperManager wallpaperManager = WallpaperManager.getInstance(context);
wallpaperManager.setWallpaperOffsetSteps(1, 1);
wallpaperManager.suggestDesiredDimensions(width, height);
try
wallpaperManager.setBitmap(bitmap);
catch (IOException e)
e.printStackTrace();
catch(Exception e)
Log.e(TAG,e.toString());
在 Manifest.xml 中添加这些行之后
<receiver
android:name=".BootReceiver"
android:enabled="true"
android:exported="true"
android:label="BootReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" >
</action>
</intent-filter>
</receiver>
【讨论】:
Hii @John R 如果您对我的代码感到满意,请接受我的回答。否则请告诉我... 你这样做太晚了。赏金已过期.. :( 我失去了 100 名声望 s.@John R 我在您的代码中发现了一个困难,如果我重新启动我的设备或玩游戏后回到主屏幕,壁纸尺寸会增加。如何阻止这种情况? 您回答了自己的问题。为什么我将该赏金授予该用户。因为你和他的答案是一样的,他在你之前回答了。 @Pankaj Sharma 我也遇到过这个问题,但是这段代码对我不起作用请指导我***.com/questions/32201161/…【参考方案2】:试试这个代码
Bitmap bmap2 =BitmapFactory.decodeStream(getResources().openRawResource(mThumb[position]));
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int height = metrics.heightPixels;
int width = metrics.widthPixels;
Bitmap bitmap = Bitmap.createScaledBitmap(bmap2, width, height, true);
WallpaperManager wallpaperManager = WallpaperManager.getInstance(this);
wallpaperManager.setWallpaperOffsetSteps(1, 1);
wallpaperManager.suggestDesiredDimensions(width, height);
try
wallpaperManager.setBitmap(bitmap);
catch (IOException e)
e.printStackTrace();
【讨论】:
你遇到了什么问题 重启设备或玩游戏后回到主屏幕。图片缩放。 设备重启可以通过android大师的回答来处理,但是设备方向的改变会和你玩游戏后得到的效果一样。您是否有任何应用程序执行您需要的相同任务? AndroidGuru 的代码在设备重启时不起作用。而且我已经固定了它的纵向方向。 @JohnR 我认为我们错过了有关方法SuggestDesiredDimensions()的一些非常重要的东西:“仅供当前家庭应用程序使用,指定它想要使用的壁纸大小。这允许这样应用程序有一个比物理屏幕更大的虚拟壁纸,与其工作区的大小相匹配。这是为了让主屏幕告诉他们想要什么尺寸的壁纸。没有其他人应该这样称呼它!当然不是其他非改变壁纸的主屏幕应用程序。”参考方法suggestDesiredDimensions()的描述【参考方案3】:如果您有图片网址,请使用:
WallpaperManager wpm = WallpaperManager.getInstance(context);
InputStream ins = new URL("absolute/path/of/image").openStream();
wpm.setStream(ins);
如果您有图像 URI,则使用
WallpaperManager wpm = WallpaperManager.getInstance(context);
wpm.setResource(Uri.of.image);
在您的清单文件中:
<uses-permission android:name="android.permission.SET_WALLPAPER"></uses-permission>
别忘了将此代码放在AsyncTask
。
【讨论】:
【参考方案4】:试试这个代码:
public void changeWallpaper(String path)
FileInputStream is;
BufferedInputStream bis;
WallpaperManager wallpaperManager;
Drawable wallpaperDrawable;
File sdcard = Environment.getExternalStorageDirectory();
try
is = new FileInputStream(new File(path));
bis = new BufferedInputStream(is);
Bitmap bitmap = BitmapFactory.decodeStream(bis);
Bitmap useThisBitmap = Bitmap.createBitmap(bitmap);
wallpaperManager = WallpaperManager.getInstance(getActivity());
wallpaperDrawable = wallpaperManager.getDrawable();
wallpaperManager.setBitmap(useThisBitmap);
catch (Exception e)
e.printStackTrace();
在这个例子中,我使用了来自我的device SD
卡片的图片...
这对我来说非常有用..
【讨论】:
我有可绘制的图像,如何做到这一点?【参考方案5】:注意:可能不适合你。
你需要这个:
WallpaperManager wallpaperManager = WallpaperManager.getInstance(this);
try
wallpaperManager.setBitmap(bitmap);
wallpaperManager.suggestDesiredDimensions(width, height);
Toast.makeText(this, "Wallpaper Set", Toast.LENGTH_SHORT).show();
catch (IOException e)
e.printStackTrace();
enter link description here
【讨论】:
以上是关于壁纸不适合设备屏幕的主要内容,如果未能解决你的问题,请参考以下文章