我正在尝试制作壁纸应用程序 . 在使用位图设置壁纸时遇到了大麻烦 . 我试着找出一个星期的答案 .
我想将Bitmap设置为壁纸
-
避免收获
-
scaleType:fit_center(对齐中心垂直,宽高比)
我该怎么做?
附:我发现也许我可以使用Bitmap.createBitmap,但我的尝试一遍又一遍地失败了 . 我不知道我应该只使用WallPaperManager或Bitmap.createBitmp Too .
static Bitmap createBitmap(Bitmap source,int x,int y,int width,int height,Matrix m,boolean filter)
public void setScreenBitmap(final Bitmap bitmapInputed)
{
final WallpaperManager wpm = WallpaperManager.getInstance(myContext);
final Display display = ((Activity) this.myContext).getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;
try
{
wpm.setBitmap(Bitmap.createScaledBitmap(bitmapInputed, width, height, true));
}
catch (IOException e)
{
Log.e(TAG+".setScreenBitmap", e.toString());
e.printStackTrace();
}
wpm.setWallpaperOffsetSteps(1.0f, 1.0f);
wpm.suggestDesiredDimensions(width, height);
}
09-06 20:38:15.563: W/System.err(4892): java.lang.IllegalArgumentException: x must be >= 0
09-06 20:38:15.563: W/System.err(4892): at android.graphics.Bitmap.checkXYSign(Bitmap.java:285)
09-06 20:38:15.563: W/System.err(4892): at android.graphics.Bitmap.createBitmap(Bitmap.java:580)
09-06 20:38:15.568: W/System.err(4892): at android.graphics.Bitmap.createBitmap(Bitmap.java:551)
09-06 20:38:15.568: W/System.err(4892): at com.myarena.util.MyWallpaperUtil.getBitmapFromCenterAndScreenSize(MyWallpaperUtil.java:459)
09-06 20:38:15.568: W/System.err(4892): at com.myarena.util.MyWallpaperUtil.setScreenBitmap(MyWallpaperUtil.java:485)
09-06 20:38:15.568: W/System.err(4892): at com.myarena.util.MyWallpaperUtil.changeWallpaper(MyWallpaperUtil.java:231)
09-06 20:38:15.568: W/System.err(4892): at com.myarena.controller.ControllerActivity$PlaceholderFragment$2.onClick(ControllerActivity.java:213)
09-06 20:38:15.568: W/System.err(4892): at android.view.View.performClick(View.java:4489)
09-06 20:38:15.568: W/System.err(4892): at android.view.View$PerformClick.run(View.java:18803)
09-06 20:38:15.568: W/System.err(4892): at android.os.Handler.handleCallback(Handler.java:730)
09-06 20:38:15.568: W/System.err(4892): at android.os.Handler.dispatchMessage(Handler.java:92)
09-06 20:38:15.568: W/System.err(4892): at android.os.Looper.loop(Looper.java:137)
09-06 20:38:15.568: W/System.err(4892): at android.app.ActivityThread.main(ActivityThread.java:5493)
09-06 20:38:15.568: W/System.err(4892): at java.lang.reflect.Method.invokeNative(Native Method)
09-06 20:38:15.568: W/System.err(4892): at java.lang.reflect.Method.invoke(Method.java:525)
09-06 20:38:15.568: W/System.err(4892): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1209)
09-06 20:38:15.568: W/System.err(4892): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1025)
09-06 20:38:15.568: W/System.err(4892): at dalvik.system.NativeStart.main(Native Method)
1 回答
如果您想从中心和相同的屏幕分辨率进行位图裁剪,请使用以下方法 . 返回位图与屏幕分辨率和裁剪相同 .
对于Ex . 您的位图大小480x820
您的设备尺寸为480x800,其返回值为480x800(前10个像素,后10个像素,后缩放) .
您的设备尺寸为800x1280,其返回800x1280(前43像素,后43像素,后缩放) .