【问题标题】:Set image as wallpaper from imageview irrespective of the image size, android?无论图像大小如何,都将图像设置为imageview的墙纸,android?
【发布时间】:2013-06-03 19:46:43
【问题描述】:

我的问题是在 imageview 上预览的图像无法完全设置为背景墙纸。它的一部分被削减。 这是我点击按钮

    setasW.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
              mImage.buildDrawingCache();
              Bitmap bmap = mImage.getDrawingCache();

              float scaleWidth = ((float) width) / bmap .getWidth();
            float scaleHeight = ((float) height) / bmap .getHeight();
            Matrix matrix = new Matrix();
            matrix.postScale(scaleWidth, scaleHeight);

              Bitmap scaledBitmap = Bitmap.createBitmap(bmap, 0, 0,bmap .getWidth(), bmap .getHeight(), matrix, true);;
              System.out.println("scaledBitmap-------"+scaledBitmap);
             WallpaperManager m=WallpaperManager.getInstance(getApplicationContext());
             try {
                m.setBitmap(scaledBitmap);
             } catch (IOException e) {
                e.printStackTrace();
             }
        }
     });

这里的 mimage 是图像视图 宽度和高度是屏幕尺寸。

如何将全图设置为墙纸?

【问题讨论】:

    标签: android image


    【解决方案1】:

    你可以直接使用这个我做了必要的修改

         setasW.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
    
         DisplayMetrics outMetrics=new DisplayMetrics();
                                getWindowManager().getDefaultDisplay().getMetrics(outMetrics);
                                int w=outMetrics.widthPixels;
                                int h=outMetrics.heightPixels;
    
    
    Rect rectgle= new Rect();
    Window window= getWindow();
    window.getDecorView().getWindowVisibleDisplayFrame(rectgle);
    int StatusBarHeight= rectgle.top;
    int contentViewTop= 
        window.findViewById(Window.ID_ANDROID_CONTENT).getTop();
    int TitleBarHeight= contentViewTop - StatusBarHeight;
    
    
    
                          mImage.buildDrawingCache();
                          Bitmap bmap = mImage.getDrawingCache();
    
                          bmap =Bitmap.createScaledBitmap(bmap ,w,(h-TitleBarHeight), true);
                          System.out.println("scaledBitmap-------"+scaledBitmap);
                         WallpaperManager m=WallpaperManager.getInstance(getApplicationContext());
                         try {
                            m.setBitmap(scaledBitmap);
                         } catch (IOException e) {
                            e.printStackTrace();
                         }
                    }
                 });
    

    【讨论】:

    • 在 scaledBitmap 中传递什么值?是imageview位图吗?
    • 我不确定是什么问题,但仍有大约 10% 的图像从上方被切掉。新的缩放图像与设备屏幕尺寸相同。
    • 可能是因为主屏幕的标题栏占据了那个空间
    • stackoverflow.com/questions/3407256/… 获取状态栏的这个高度并从h中减去它然后创建scaledbitmap
    • 如何获取通知栏的高度?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多