我正在尝试制作墙纸应用程序。我在用位图设置壁纸时遇到了大麻烦。我试图找出一个星期的答案。
我想将位图设置为壁纸
- 避免作物
- scaleType:fit_center(居中垂直对齐,保持原位图的比例)
我怎样才能做到?我必须创建新的位图吗?
我正在尝试制作墙纸应用程序。我在用位图设置壁纸时遇到了大麻烦。我试图找出一个星期的答案。
我想将位图设置为壁纸
我怎样才能做到?我必须创建新的位图吗?
您需要根据您的屏幕尺寸调整图片大小以制作新的位图。
这是代码:
Bitmap bitmapOrg = BitmapFactory.decodeFile(getApplicationContext()
.getFilesDir().toString() + "/images/" + imagename);
Log.e("imageheight", "" + bitmapOrg.getHeight());
Log.e("imagewidth", "" + bitmapOrg.getWidth());
double imageheight = bitmapOrg.getHeight();
double imagewidth = bitmapOrg.getWidth();
DisplayMetrics metrics = getApplicationContext().getResources()
.getDisplayMetrics();
double screenwidth = metrics.widthPixels;
double sreeenheight = metrics.heightPixels;
Log.e("screennwidth", "" + screenwidth);
double newratio = screenwidth / imagewidth;
Log.e("newratio", "" + newratio);
double newratio1 = newratio * imageheight;
double newratio2 = newratio * (imagewidth - 10); // 10 margin in width
Log.e("newratio1", "" + newratio1);
int mainheight = (int) newratio1;
// int mainweidth = (int) imagewidth;
int mainweidth = (int) newratio2;
Log.e("Mainheight", "" + mainheight);
Log.e("Mainweidtht", "" + mainweidth);
// Here you will get the scaled bitmap
Bitmap new_ScaledBitmap = Bitmap.createScaledBitmap(bitmapOrg, mainweidth,mainheight, true);
// Use this bitmap as wallpaper
要使位图适合屏幕而不剪切任何内容,您首先必须确定纵横比是大于还是小于屏幕的纵横比。如果图像纵横比大于屏幕纵横比,则意味着位图更高和/或不如屏幕宽,例如问题中的第二张图像。所以你应该像这样根据高度缩放图像:
if(imageWidth/imageHeight > screenWidth/screenHeight){
scaleFactor = screenHeight/imageHeight;
imageXPosition = screenWidth/2-imageWidth/2;
imageYPosition = 0;
否则图像应根据宽度缩放,如下所示:
}else{
scaleFactor = screenWidth/imageHeight;
imageXPosition = 0;
imageYPosition = screenWidth/2-imageWidth/2;
}
您可以使用这些值使用Matrix绘制位图,或创建具有尺寸的缩放位图,imageWidth*scaleFactor
然后在|imageHeight*scaleFactor
处绘制它。(这更节省内存。imageXPosition
imageYPosition