Android Прокручиваемые обои на экране телефона программно

Я разрабатываю приложение для обоев в Android и нахожу правильный способ установить прокручиваемые обои для своего приложения. Теперь мой код может устанавливать обои из растрового изображения, но он был обрезан, чтобы соответствовать одной странице, и остался только на одной странице (у меня 5 страниц на главном экране). Это означает, что содержимое каждой страницы может прокручиваться через обои, но обои не прокручиваются.

Я хочу установить прокручиваемые обои. Я пробовал некоторые коды из Интернета, но они не помогли. У вас есть идеи?

setImage_Wallpaper.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                File file = imageLoader.getDiscCache().get(urldisplay);
                Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());
                WallpaperManager myWallpaperManager
                        = WallpaperManager.getInstance(mContext);
                try {
                    myWallpaperManager.setBitmap(bitmap);
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        });

И я использую этот код, но не работаю:

//get screen height
Display display = getWindowManager().getDefaultDisplay();
    Point size = new Point();
    display.getSize(size);
    screenHeight = size.y;

 wallPaperBitmap= ... //your bitmap resource

//adjust the aspect ratio of the Image
//this is the main part

int width = wallPaperBitmap.getWidth();
        width = (width * screenHeight) / wallPaperBitmap.getHeight();

//set the wallpaper
//this may not be the most efficent way but it worked for me

wallpaperManager.setBitmap(Bitmap.createScaledBitmap(wallPaperBitmap, width, height, true));

person Community    schedule 06.04.2016    source источник


Ответы (1)


Сообщение старое, но в любом случае... Вы можете попробовать что-то похожее на это

public static void setWallpaper(Context context) {
    int wallpaperRId = getWallpaperImageRid(context);

    if (wallpaperRId == 0) {
        return;
    }

    Bitmap tempBmp = BitmapFactory.decodeResource(context.getResources(), wallpaperRId);

    // get size
    DisplayMetrics metrics = context.getResources().getDisplayMetrics();
    int width = metrics.widthPixels;
    int height = metrics.heightPixels;
    int area = width * height / 1000;

    width *= 2;
    float scale = width / (float) tempBmp.getWidth();
    height = (int) (scale * tempBmp.getHeight());

    Bitmap bitmap = Bitmap.createScaledBitmap(tempBmp,width,height, true);

    WallpaperManager wallpaperManager = WallpaperManager.getInstance(context);
    wallpaperManager.setWallpaperOffsetSteps(1, 1);
    wallpaperManager.suggestDesiredDimensions(width, height);

    try {
        wallpaperManager.setBitmap(bitmap);
    } catch (Exception e) {
        e.printStackTrace();
    }
}
person Darko    schedule 27.12.2016
comment
о, большое спасибо! кажется, работает! Но, вы забыли про разрешение android.permission.SET_WALLPAPER_HINTS для wallpaperManager.suggestDesiredDimensions(width, height); строки - person Dyno Cris; 18.05.2021