我想从我的Android应用程序中下载我的服务器中的图像,然后在ImageView
显示,顶部有黑色图层,并且有一定的不透明度。
我能够非常轻松地使用UIView
blackColor
作为背景颜色在iPhone上进行此操作,并将其置于UIImageView
上方且alpha设置为.4。在Android上有类似的方法吗?我一直在阅读这篇文章,大多数在线方法都说要使用选择器等。
但是当从服务器下载图像然后将黑色视图放在最上面时,这不会起作用。
答案 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>
这就是结果:
出于您自己的目的,您可能需要使用高度和宽度属性进行一些操作,否则这应该可以解决问题。
答案 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);
您可以使用Picasso或Universal Image Loader代替Volley,并享受类似的结果。
在这两种情况下,您都需要此权限
<uses-permission android:name="android.permission.INTERNET" />