Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用位图设置墙纸避免裁剪并设置贴合中心_Java_Android_Bitmap_Android Wallpaper - Fatal编程技术网

Java 使用位图设置墙纸避免裁剪并设置贴合中心

Java 使用位图设置墙纸避免裁剪并设置贴合中心,java,android,bitmap,android-wallpaper,Java,Android,Bitmap,Android Wallpaper,我正在尝试制作一个壁纸应用程序。 我在用位图设置壁纸时遇到了很大的麻烦。我花了一周的时间试图找出答案 我想把位图设置成壁纸 避免收割 scaleType:fit_center(中心垂直对齐,纵横比) 我怎样才能做到 另外,我发现也许我可以使用Bitmap.createBitmap,但我的尝试一再失败。 我不知道我应该只使用WallperManager,还是同时使用Bitmap.createBitmp 静态位图创建位图(位图源、整数x、整数y、整数宽度、整数高度、矩阵m、布尔过滤器) 如果您希望位

我正在尝试制作一个壁纸应用程序。 我在用位图设置壁纸时遇到了很大的麻烦。我花了一周的时间试图找出答案

我想把位图设置成壁纸

  • 避免收割
  • scaleType:fit_center(中心垂直对齐,纵横比)
  • 我怎样才能做到

    另外,我发现也许我可以使用Bitmap.createBitmap,但我的尝试一再失败。 我不知道我应该只使用WallperManager,还是同时使用Bitmap.createBitmp

    静态位图创建位图(位图源、整数x、整数y、整数宽度、整数高度、矩阵m、布尔过滤器)


    如果您希望位图从中心裁剪,并使用相同的屏幕分辨率,请使用以下方法。 这里返回的位图与您的屏幕分辨率和裁剪相同

    例如,您的位图大小为480x820

    您的设备大小为480x800,其返回值为480x800(缩放后移除前10个像素和下10个像素)

    您的设备大小为800x1280,其返回值为800x1280(缩放后去除顶部43像素和底部43像素)


    谢谢你回答我的问题,大哥!但是,我的意思是“我不想裁剪我的位图”,我注意到(这么晚)我被写到“match_parent width”实际上是指match_parent width或height。对不起…嗯。。。这一行出现错误->(java.lang.IllegalArgumentException:y必须>=0)(Bitmap.createBitmap(newBitmap,bitmapGapX,bitmapGapY,bitmapNewWidth,bitmapNewHeight);)你能添加日志并进行测试吗?我认为“if(screen\u ratio>Bitmap\u ratio)”是错误的。它应该是if(屏幕比例<位图比例)
        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)
    
    private Bitmap cropBitmapFromCenterAndScreenSize(Bitmap bitmap) {
        float screenWidth, screenHeight;
        float bitmap_width = bitmap.getWidth(), bitmap_height = bitmap
                .getHeight();
        Display display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE))
                .getDefaultDisplay();
        screenWidth = display.getWidth();
        screenHeight = display.getHeight();
    
        Log.i("TAG", "bitmap_width " + bitmap_width);
        Log.i("TAG", "bitmap_height " + bitmap_height);
    
        float bitmap_ratio = (float) (bitmap_width / bitmap_height);
        float screen_ratio = (float) (screenWidth / screenHeight);
        int bitmapNewWidth, bitmapNewHeight;
    
        Log.i("TAG", "bitmap_ratio " + bitmap_ratio);
        Log.i("TAG", "screen_ratio " + screen_ratio);
    
        if (screen_ratio > bitmap_ratio) {
            bitmapNewWidth = (int) screenWidth;
            bitmapNewHeight = (int) (bitmapNewWidth / bitmap_ratio);
        } else {
            bitmapNewHeight = (int) screenHeight;
            bitmapNewWidth = (int) (bitmapNewHeight * bitmap_ratio);
        }
    
        bitmap = Bitmap.createScaledBitmap(bitmap, bitmapNewWidth,
                bitmapNewHeight, true);
    
        Log.i("TAG", "screenWidth " + screenWidth);
        Log.i("TAG", "screenHeight " + screenHeight);
        Log.i("TAG", "bitmapNewWidth " + bitmapNewWidth);
        Log.i("TAG", "bitmapNewHeight " + bitmapNewHeight);
    
        int bitmapGapX, bitmapGapY;
        bitmapGapX = (int) ((bitmapNewWidth - screenWidth) / 2.0f);
        bitmapGapY = (int) ((bitmapNewHeight - screenHeight) / 2.0f);
    
        Log.i("TAG", "bitmapGapX " + bitmapGapX);
        Log.i("TAG", "bitmapGapY " + bitmapGapY);
    
        bitmap = Bitmap.createBitmap(bitmap, bitmapGapX, bitmapGapY,
                screenWidth,screenHeight);
        return bitmap;
    }