android - 显示来自 URL 的图像 - 大小和屏幕方向问题

标签 android imageview screen-orientation

我正在尝试显示来自 URL 的图像,该图像可能大于屏幕尺寸。我有它的工作原理,但我希望它可以缩放以适合屏幕,而且当屏幕方向改变时我也遇到了问题。图像很小,我希望它也能将宽度缩放到屏幕上。 (在这两种情况下,我都希望图像用滚动条填充屏幕宽度(如果需要高度)。

这是我的 ImageView:

<ImageView android:id="@+id/ImageView01" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"
    android:scaleType="fitCenter"
    android:adjustViewBounds="true">
</ImageView>

这是加载图像的 java 代码:(为简单起见删除了一些错误处理代码)

    Object content = null;
    try{
      URL url = new URL("http://farm1.static.flickr.com/150/399390737_7a3d508730_b.jpg");
      content = url.getContent();
    }
      catch(Exception ex)
    {
        ex.printStackTrace();
    }
    InputStream is = (InputStream)content;
    Drawable image = Drawable.createFromStream(is, "src");
    Image01.setImageDrawable(image);

我已经为 android:scaleType 尝试了不同的设置。如果之前有人问过这个问题,我很抱歉。我已经阅读了有关该主题的许多教程,但它们似乎对我不起作用。不确定它是否与图像加载方式有关。 (来自网络而不是本地资源)

另一个问题是有时甚至无法加载图像。没有运行时错误,我只是在 ImageView 中什么也得不到。

如果您需要更多信息或说明,请告诉我。

最佳答案

关于“有时甚至没有加载图像”的问题与上下文有关,所以我使用这个函数来解决这个问题

public Object fetch(String address) throws MalformedURLException,
    IOException {
        URL url = new URL(address);
        Object content = url.getContent();
        return content;
    }  

    private Drawable ImageOperations(Context ctx, String url) {
        try {
            InputStream is = (InputStream) this.fetch(url);
            Drawable d = Drawable.createFromStream(is, "src");
            return d;
        } catch (MalformedURLException e) {
            return null;
        } catch (IOException e) {
            return null;
        }
    }

所以要用你的图像填充屏幕宽度,你必须有这样的代码

    try{
        String url = "http://farm1.static.flickr.com/150/399390737_7a3d508730_b.jpg";           
        Drawable image =ImageOperations(this,url);
        Image01.setImageDrawable(image);
    }
    catch(Exception ex)
    {
        ex.printStackTrace();
    }


    Image01.setMinimumWidth(width);
    Image01.setMinimumHeight(height);

    Image01.setMaxWidth(width);
    Image01.setMaxHeight(height);

更新:: 如果你加载一个大尺寸的图像,显​​然你将不得不等待更多的时间,并且下载问题可能会导致 UnknowHostException。

是的,你是对的,你会在本地保存你的图像,本地访问比下载快。

为避免旋转更改出现问题,请在 Manifest.xml 中设置 configChanges="keyboardHidden|orientation"属性

<activity android:name=".myActivity"
...
         android:configChanges="keyboardHidden|orientation"   >
...
/>

关于android - 显示来自 URL 的图像 - 大小和屏幕方向问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3601775/

相关文章:

android - 通过 Wifi-Direct 连接 Linux 和 Android(BeagleBone Black 和 Android-app)

android - 如何在缩放或拖动(左,右,上,下)图像时准确定位另一个 View ?

android - adb 今天无法连接到 VirtualBox 中的 Android-x86

java - Android- EXTRA_HEADERS 未反射(reflect)在更新的 Chrome 版本大于 83 中

android - 如何将矩形设置为 ImageView 和按钮的背景?

Android 应用程序在方向更改时崩溃 java.lang.IllegalArgumentException : Wrong state class -- expecting View State

iphone - iOS:从多任务栏恢复应用程序时如何保持方向?

android - 屏幕旋转后嵌套 fragment 失去对 onCreateOptionsMenu 的调用

javascript - 如何通过手机浏览器检测手机号码?

Android ImageView 将较小的图像缩放到具有灵活高度的宽度,而不会裁剪或扭曲