संपादित: जोड़ा गया Y ऑफसेट ठीक - धन्यवाद @Jason गौफ!
ठीक है तो यह पता चला है कि एस 3 पर होम स्क्रीन की न्यूनतम चौड़ाई 720 नहीं है लेकिन वास्तव में 1280 है! आप तो आदेश स्क्रीन के केंद्र में वॉलपेपर लागू करने के लिए मैं तुरंत एक खाली बिटमैप 1280x1280 बनाने के लिए किया था
wallpaperManager.getDesiredMinimumWidth();//returned 1280 on s3
wallpaperManager.getDesiredMinimumHeight();//also returned 1280 on s3
फोन करके वांछित न्यूनतम चौड़ाई और वॉलपेपर की ऊंचाई पता कर सकते हैं, तो मेरी वॉलपेपर ओवरले मेरी BitmapHelper का उपयोग कर
public class BitmapHelper {
public static Bitmap overlayIntoCentre(Bitmap bmp1, Bitmap bmp2) {
Bitmap bmOverlay = Bitmap.createBitmap(bmp1.getWidth(), bmp1.getHeight(), bmp1.getConfig());
Canvas canvas = new Canvas(bmOverlay);
canvas.drawBitmap(bmp1, new Matrix(), null);//draw background bitmap
//overlay the second in the centre of the first
//(may experience issues if the first bitmap is smaller than the second, but then why would you want to overlay a bigger one over a smaller one?!)
//EDIT: added Y offest fix - thanks @Jason Goff!
canvas.drawBitmap(bmp2, (bmp1.getWidth()/2)-(bmp2.getWidth()/2), (bmp1.getHeight()/2)-(bmp2.getHeight/2), null);
return bmOverlay;
}
public static Bitmap createNewBitmap(int width, int height)
{
//create a blanks bitmap of the desired width/height
return Bitmap.createBitmap(width, height, Config.ARGB_8888);
}
}
और heres मेरी कोड के बाकी: खाली बिटमैप के केन्द्र में, मैं बिटमैप्स में सुधार करने के लिए तरीकों के साथ एक स्थिर BitmapHelper श्रेणी का निर्माण, यहाँ बिटमैप बनाने और वॉलपेपर छवि डालने के लिए तरीके है :
private void applyWallpaperFromFile(final File file)
{
Bitmap wallpaperImage = BitmapFactory.decodeFile(file.getPath());
try {
if((wallpaperManager.getDesiredMinimumWidth()>0)&&(wallpaperManager.getDesiredMinimumHeight()>0))
{
Bitmap blank = BitmapHelper.createNewBitmap(wallpaperManager.getDesiredMinimumWidth(), wallpaperManager.getDesiredMinimumHeight());
Bitmap overlay = BitmapHelper.overlayIntoCentre(blank, wallpaperImage);
wallpaperManager.setBitmap(overlay);
}
else
{
wallpaperManager.setBitmap(wallpaperImage);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(WallpaperActivity.this,"Wallpaper set to:"+file.getName(), Toast.LENGTH_SHORT).show();
}
});
}
आह कैसे इतने सारे घंटे से छवि का आकार तय करने के लिए की मेरी समस्या हल ... – boltsfrombluesky
धन्यवाद एक टन @AndroidNoob - थोड़ी देर के सटीक वॉलपेपर सेट करने के लिए संघर्ष कर रहा था - अंत में इसके साथ मिल गया आपके कोड में मामूली बदलाव। मूल रूप से एक वाई ऑफसेट सेट करना पड़ा। – KurtCobain
आप मेरे जीवनकाल बचा रहे हैं! मैं इस पर आधा दिन फंस गया हूं। बहुत बहुत धन्यवाद :) – Ralphilius