Android下载图片并在ImageView中显示黑色阴影

时间:2014-07-08 17:06:43

标签: android

我想从我的Android应用程序中下载我的服务器中的图像,然后在ImageView显示,顶部有黑色图层,并且有一定的不透明度。

我能够非常轻松地使用UIView blackColor作为背景颜色在iPhone上进行此操作,并将其置于UIImageView上方且alpha设置为.4。在Android上有类似的方法吗?我一直在阅读这篇文章,大多数在线方法都说要使用选择器等。

但是当从服务器下载图像然后将黑色视图放在最上面时,这不会起作用。

3 个答案:

答案 0 :(得分:1)

使用FrameLayout可以从中受益匪浅。

总而言之,FrameLayout是一个单一的框架,其中放入的所有内容基本上都是在彼此的前面堆叠(而不是在每个框架上堆叠的东西的LinearLayout)其他)。

您设置此方法的示例如下:

<!-- This can be whatever your parent view is -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <!-- Here is the actual usage of the FrameLayout.  Replace the height -->
    <!-- and width with the size of the image that you're using           -->
    <FrameLayout
    android:layout_height="100dp"
    android:layout_width="100dp">

        <!-- You won't use the src tag seeing as you get your image from a -->
        <!-- server, but I have it for the sake of demonstration.          -->
        <ImageView
            android:id="@+id/your_image_view"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:src="@drawable/ic_launcher"/>

        <!-- This is a basic view that has a black background and a .4 alpha -->
        <View
            android:id="@+id/shadow_view"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:alpha=".4"
            android:background="#000000"/>


    </FrameLayout>


</LinearLayout>

这就是结果:

Thumbs up with a shadow cover

出于您自己的目的,您可能需要使用高度和宽度属性进行一些操作,否则这应该可以解决问题。

答案 1 :(得分:0)

您可以下载位图并将其设置为imageview:

class myClass extends AsyncTask<String, Void, Bitmap>{

ImageView bmImage;

    public DownloadHomeImageTask(ImageView bmImage) {
        this.bmImage = bmImage;

    }

protected Bitmap doInBackground(String... urls) {
        String url = urls[0];
        Bitmap icon = null;
        try {
            InputStream in = new java.net.URL(url).openStream();
            icon = BitmapFactory.decodeStream(in);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return icon;
    }

    protected void onPostExecute(Bitmap result) {
        if (result != null)
        {
            bmImage.setImageBitmap(result);
        }
}

答案 2 :(得分:0)

在Android中执行此操作的两种方法:


:一种。旧方式:


下载图片:

Bitmap downloadByUrl(String url) {
     // initilize the default HTTP client object
     DefaultHttpClient client = new DefaultHttpClient();
     final HttpGet getRequest = new HttpGet(imageUrl);
     HttpResponse response = client.execute(getRequest);
     HttpEntity entity = response.getEntity();
     if (entity != null) {
             InputStream inputStream = null;
             inputStream = entity.getContent();
             bmp = BitmapFactory.decodeStream(inputStream);
             inputStream.close();
     }
}


并加载到ImageView:

imageView.setImageBitmap(image);

将加载代码放在单独的线程中是个好主意,例如 好主意。通过使用AsyncTask,使您的代码类似于:

new AsyncTask<Params, Progress, Result>() {
       @Override protected Result doInBackground() {
           // executed on worker thread
           bmp = downloadByUrl(String url)
       }

       @Override protected void onPostExecute() {
           // executed on UI thread
           imageView.setImageBitmap(bmp);
       }
}.execute(params);


<强> B中。新方式:

使用Volley将为您完成大部分工作,并且可能会比我们大多数人更聪明地做到这一点:

声明NetworkImageView而不是标准的ImageView:

<com.android.volley.toolbox.NetworkImageView
        android:id="@+id/icon"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:src="@drawable/default_placeholder" />

..并指定一个加载器,例如at onCreate():

ImageLoader imageLoader = VolleySingleton.getImageLoader(); 
imageView.setImageUrl(url, imageLoader); 


您可以使用PicassoUniversal Image Loader代替Volley,并享受类似的结果。

在这两种情况下,您都需要此权限

<uses-permission android:name="android.permission.INTERNET" />