目前我工作的文件浏览器。一切工作正常,但有一个例外: 如果用户点击的图像上(JPG格式,PNG,BMP,..),我希望图像显示在对话框或弹出具有大小相同的图像 - 以便有没有边界的。 图像文件位于SD卡。
At the moment I am working on a file browser. Everything works fine with one exception: If the user clicks on an image (jpg, png, bmp, ..), I want the image to be displayed in a dialog or in a popup which has the same size as the image - so that there are no borders at all. The image files are located on the sdcard.
这是我到目前为止有:
BitmapDrawable bitmap = new BitmapDrawable(context.getResources(), TARGET_PATH);
AlertDialog.Builder imageDialog = new AlertDialog.Builder(context);
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.thumbnail, null);
ImageView image = (ImageView) layout.findViewById(R.id.thumbnail_IMAGEVIEW);
image.setImageDrawable(bitmap);
imageDialog.setView(layout);
imageDialog.create();
imageDialog.show();
XML文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ImageView
android:id="@+id/thumbnail_IMAGEVIEW"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:contentDescription="@string/icon_DESCRIPTION" />
</RelativeLayout>
下面是输出:
有在图像的边缘丑陋的边界 - 我不希望他们被显示。我试过很多东西,在谷歌上市的例子,等等。 - 没有什么工作还没有
There are ugly borders at the edges of the images - I don't want them to be shown. I tried lots of stuff and examples listed in google, etc.. - nothing worked yet.
最好的选择将是使对话框/图像后面的视图,大小相同的图像。另一种方式可以是设置图像透明后面的背景
The best option will be to make the dialog/the view behind the image, the same size as the image. Another way could be to set the background behind the image transparent.
我如何实现任何解决方案? 我很想使背景相同尺寸的图像,所以不存在看不见的东西离开了,但我也都会好起来的透明选项。
How do I achieve any solution? I'd love to make the background the same size as the image is, so there is no "invisible" stuff left, but I will also be okay with the transparent option.
解决方法:
// Get screen size
Display display = context.getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int screenWidth = size.x;
int screenHeight = size.y;
// Get target image size
Bitmap bitmap = BitmapFactory.decodeFile(TARGET);
int bitmapHeight = bitmap.getHeight();
int bitmapWidth = bitmap.getWidth();
// Scale the image down to fit perfectly into the screen
// The value (250 in this case) must be adjusted for phone/tables displays
while(bitmapHeight > (screenHeight - 250) || bitmapWidth > (screenWidth - 250)) {
bitmapHeight = bitmapHeight / 2;
bitmapWidth = bitmapWidth / 2;
}
// Create resized bitmap image
BitmapDrawable resizedBitmap = new BitmapDrawable(context.getResources(), Bitmap.createScaledBitmap(bitmap, bitmapWidth, bitmapHeight, false));
// Create dialog
Dialog dialog = new Dialog(context);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.thumbnail);
ImageView image = (ImageView) dialog.findViewById(R.id.imageview);
// !!! Do here setBackground() instead of setImageDrawable() !!! //
image.setBackground(resizedBitmap);
// Without this line there is a very small border around the image (1px)
// In my opinion it looks much better without it, so the choice is up to you.
dialog.getWindow().setBackgroundDrawable(null);
// Show the dialog
dialog.show();
XML文件:
<?xml version="1.0" encoding="utf-8"?>
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/imageview"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</ImageView>
最终输出:
您可以创建自定义对话框显示的图像, 做一个布局充气对话框的的setContentView, 带一个宽度和高度包裹内容和ImageView的线性布局,它具有规模性fitxy。
you can make a custom dialog for showing images , make a layout for inflating in dialog's setcontentview , take one linear layout with width and height wrap content and imageview with in it with scale property fitxy .
上一篇:我如何在程序中引入Android的布局?布局、程序、如何在、Android
下一篇:安卓TimePicker AM / PM按钮不调用onTimeChanged按钮、AM、TimePicker、onTimeChanged