1

おはようございます。壁紙を設定するときに、ネットから 1024 x 768 のサイズで jpg でダウンロードした壁紙を正しく設定するコードがあります。これはすべてのホームスクリーンに配布されますが、Android 4 以降ではスクロールできず、すべてのホーム画面で修正された画像の一部 問題を解決したいので、助けていただければ幸いです

挨拶とごめんなさい英語

//path is a String with image's url
public int setWallpaper(String path) {          
    int width, height;
    Bitmap dbm, bm;         
    bm = null;
    dbm = null; 
    InputStream is = null;

    WallpaperManager wpm = wallpaperManager.getInstance(this);              

    //all images are 1024x 768 
    //to scale bitmap the widht have to be 1.33 bigger than screen's height
    if((wpm != null) && (dis != null)){ 
        height = dis.getHeight();
        width = (int) (height * 1.33);              

        try {           
            URLConnection conn = new URL(path).openConnection();                
            conn.connect();             
            is = conn.getInputStream();                 

            if (is != null) {                   
                bm = BitmapFactory.decodeStream(new FlushedInputStream(is));                    
                dbm = Bitmap.createScaledBitmap(bm, width, height, false);                  
                wpm.setBitmap(dbm); 

            }else {
                return 2;
            }

        } catch (MalformedURLException e) {                 
            e.printStackTrace();                
        } catch (IOException e) {               
            e.printStackTrace();                
        } finally {             
            if (is != null) {
                try {
                    is.close();
                }
                catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }           
        if(bm != null){
            bm.recycle();
        }
        if(dbm != null){
            dbm.recycle();  
        }           
    }else {
        return 1;
    }
    return 0;
}
4

1 に答える 1

1

Android 4 ではスクロールできなくなりましたが、拡大されないようにするには、次の操作を行います。

// get screen dimensions
DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int height = displaymetrics.heightPixels;
int width = displaymetrics.widthPixels;

wpm.suggestDesiredDimensions(width, height);
wpm.setBitmap(dbm);

suggestDesiredDimensions を使用して、壁紙のサイズを指定します。

開発者リファレンスから:

public void suggestDesiredDimensions (int 最小幅、int 最小高さ)

導入されたバージョン: API レベル 5 現在のホーム アプリケーションでのみ使用され、使用する壁紙のサイズを指定します。これにより、そのようなアプリケーションは、ワークスペースのサイズに合わせて、物理画面よりも大きい仮想壁紙を持つことができます。

これを読んでいないように見える開発者に注意してください。これは、ホーム画面が希望する壁紙のサイズを伝えるためのものです。誰もこれを呼ぶべきではありません!確かに、壁紙を変更する他のホーム画面以外のアプリではありません。これらのアプリは、提案されたサイズを取得して、それに一致する壁紙を作成できるようになっています。

次のようにして、マニフェストで SET_WALLPAPER_HINTS パーミッションも要求する必要があることに注意してください。

<uses-permission android:name="android.permission.SET_WALLPAPER_HINTS"/>
于 2013-01-24T21:31:26.930 に答える