android网络图片
❶ Android知识点——Glide获取图片宽高
先很负责任的说一下,这个内容也是网络来的,但是很不负责任的是,当初只记录解决方案,忘了记录是查看的哪篇博客了,这里先对不知道借鉴的谁表示感谢。无法分享链接,就厚着脸皮把(转)字去掉了,请大家谅解。
先提供一下 Android知识点——目录 的链接,然后让我们进入正题。
实际上,这篇博客所说的内容并不是所有人都可以用到,毕竟大多数时候,我们只需要展示图片,而并不需要知道图片的宽高;有的时候我们只需要知道展示的宽高(即ImageView)的宽高,不需要知道图片资源的实际尺寸。
但是需求千千万万嘛,以程序员的脑洞,怎么能想到产品的脑洞究竟有多大呢?我这里就遇到了一个需求,那就是需要在一个可缩放的图片上标注icon(类似地图上的marker)。这还不算完,毕竟在找到的图片缩放控件 PhotoView 中,我们点击到图片上后,是有点击点位在整个图片上的百分比坐标回调的。而多端通过百分比是很容易就能在图片中获取到相同的点位,并回显出对应的icon的(没办法,谁让我找的是方便计算百分比的呢),结果Web端优先做了这部分功能,使用的是在原图上的具体坐标。这样我百分比的计划自然就落空了,只能想办法计算出具体的点位。
因此获取图片的原始尺寸就是一个必不可少的环节,我刚刚网络了一下,查到 wangke_king 的 Android获取图片的宽度和高度 中使用的方法是:
我这里没有亲测过,不过应该是没有问题,但是很遗憾我们的需求是在网络图片上做测量,所以这个方法也无法使用,不过如果其他有类似本地图片需求的,不妨尝试一下。而我之前找到的解决方案为:
首先说明,上述的方法是可以实现图片的尺寸测量的,只是有一个小小的问题,那就是想要计算出Drawable的宽高,需要必须等到图片加载完成之后,尝试了使用view.post(),监听组件加载完成,但是并不是每次都能获取到Drawable的宽高,因此当初的解决方案是写了个两秒钟的定时器,每50毫秒测量一次,直到获取到值为止。这样的解决方案可谓是相当无脑了,而且还要消耗很多不必要的资源。
还好皇天不负有心人啊,终于找到了通过Glide获取图片宽高的方式:
这样我们就可以通过回调,在Glide将网络图片注入到对应的图片组件的时候,得到图片的Bitmap,然后在通过Bitmap来获取图片的宽高。但是需要注意的一点是,Bitmap的泛型是需要手动去设置的哦。
另外SimpleTarget现在已经过时,暂时还没有查到。我搜索过SimpleTarget过时使用什么替换,有一些说法是使用BitmapImageViewTarget ,不过下面是实际测试结果。
图片链接:
网络图片-景色
测量结果:
图片信息:
如果不是我使用有误的话,BitmapImageViewTarget 是无法替换SimpleTarget ,实现测量图片原始宽高的功能的。
❷ Android 怎么查看网络图片的方法
随着智能手机的普及,尤其是基于安卓系统的广泛使用,使android开发具有很好的前景.下面分享一个Android 怎么查看网络图片的方法. 第一步:下面是具体布局文件 android:id="@+id/picturepagh" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello_world" / android:id="@+id/btn" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="查看" / android:id="@+id/imageView" android:layout_width="fill_parent" android:layout_height="200px" / 第二步:在MainActivity中进行图片图示代码编写 public class MainActivity extends Activity { private Button btn; private EditText path; private ImageView imgview; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn = (Button) findViewById(R.id.btn); path = (EditText) findViewById(R.id.picturepagh); imgview = (ImageView) findViewById(R.id.imageView); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Log.i("CLICK", ((Button) v).getText().toString()); new Thread(runa).start(); } }); } public void setView() { String picturepath = path.getText().toString(); byte[] data = null; try { data = ImageService.getImage(picturepath); Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);// BitmapFactory:图片工厂! Looper.prepare();// 必须调用此方法,要不然会报错 Message msg = new Message(); msg.what = 0; msg.obj = bitmap; handler.sendMessage(msg); } catch (Exception e) { Toast.makeText(getApplicationContext(), "获取图片错误", 1).show(); } } private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { if (msg.what == 0) { updateImageView((Bitmap) msg.obj); } } }; private Runnable runa = new Runnable() { @Override public void run() { setView(); } }; private void updateImageView(Bitmap bm) { imgview.setImageBitmap(bm); } } 第三步,添加一个流处理工作类StreamTool public class StreamTool { public static byte[] read(InputStream ins) throws Exception { ByteArrayOutputStream outstream = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int length = 0; while ((length = ins.read(buffer)) -1) { outstream.write(buffer, 0, length); } outstream.close(); return outstream.toByteArray(); } } 第四步、添加一个ImageService图片服务类,里面包含一个获取网络数据的方法; public class ImageService { // 获取网络图片的数据 public static byte[] getImage(String picturepath) throws Exception { URL url = new URL(picturepath); HttpURLConnection conn = (HttpURLConnection) url.openConnection();// 基于http协议的连接对象 conn.setConnectTimeout(10);// 10秒; conn.setRequestMethod("GET");// 大写 if (conn.getResponseCode() == 200) { InputStream ins = conn.getInputStream(); return StreamTool.read(ins); } return null; } } Instagram APP
❸ android中ImageView的setImageURI能不能设置网络上面的图片,能不能正常显示
URL picUrl = new URL(" http://www.souchiwang.com/images/user_3.jpg");
Bitmap pngBM = BitmapFactory.decodeStream(picUrl.openStream());
imageView.setImageBitmap(pngBM);
既可实现andorid的imageView控件显示网络图片
❹ android 网络获取图片从模糊到清晰
那个模糊的是先加载了一张分辨率小的预览图,然后当你点开那张预览图后,后台回去请求服务器,下载高分辨率的图片,完成后刷新imageView,就变清晰了。
❺ android 网络获取图片并在activity上显示
在Android应用中,获取网络图片并在Activity中显示,是一个常见的需求。首先,你需要使用HttpURLConnection或OkHttp等网络库来下载图片。这里,我们可以使用OkHttp,因为它提供了简洁且高效的API。
以下是一个简单的示例代码,用于从网络获取图片并将其设置为Activity的背景:
1. 添加依赖
在项目级build.gradle文件中添加OkHttp依赖:
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
2. 获取网络图片
使用OkHttp发起网络请求获取图片。这里我们使用一个简单的GET请求:
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url("https://example.com/image.png").build();
Response response = client.newCall(request).execute();
if (response.isSuccessful()) {
byte[] bytes = response.body().bytes();
Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
}
3. 设置图片为Activity背景
获取到图片后,可以将其设置为Activity的背景。我们可以在Activity的onCreate方法中完成这一操作:
ImageView imageView = findViewById(R.id.background_image);
imageView.setImageBitmap(bitmap);
View backgroundView = findViewById(R.id.activity_background);
backgroundView.setBackground(new BitmapDrawable(getResources(), bitmap));
以上步骤展示了如何从网络获取图片并在Android应用的Activity中显示。值得注意的是,为了提升用户体验,应当确保网络请求异步执行,避免阻塞主线程。
此外,在实际应用中,还需要处理可能出现的异常情况,比如网络请求失败或图片下载失败等。可以使用try-catch语句来捕获并处理这些异常。
通过这种方式,我们可以在Android应用中轻松实现从网络获取图片并在Activity中展示的功能。
❻ android 加载网络图片错误
如果使用固定地址,如每个用户头像都是用户id+什么什么的,固定下来,这样更新有两种:
1。每次都重新加载。(不符合)。
2。服务器在返回其它数据的api中返回一个标记。通过标记判断。
对于2,如果用单独api去获取是否更新,有点浪费。选择你每次都要访问的api,服务器那边在其中加一个关于头像是否更新的标记。这样,只需要一次api访问就能一并解决这个问题。
❼ Android 如何用gallery批量显示网络图片.弄成那种在线浏览网页的图片.
/*
*
*/
private class downloadImage extends AsyncTask<String, Integer, Bitmap> {
Bitmap[] bms;
@Override
protected Bitmap doInBackground(String... arg0) {
// TODO Auto-generated method stub
bms = new Bitmap[arg0.length];
for (int i = 0; i < arg0.length; i++) {
Bitmap bm = Common.GetImages(arg0[i], "219.136.252.234");
bms[i] = bm;
publishProgress(i);
}
return null;
}
@Override
protected void onProgressUpdate(Integer... values) {
// TODO Auto-generated method stub
adapter = new ImageAdapter(Activity_Gallery.this, bms);
galleryFlow.setAdapter(adapter);
adapter.notifyDataSetChanged();
super.onProgressUpdate(values);
}
@Override
protected void onPostExecute(Bitmap result) {
// TODO Auto-generated method stub
adapter = new ImageAdapter(Activity_Gallery.this, bms);
galleryFlow.setAdapter(adapter);
adapter.notifyDataSetChanged();
galleryFlow.setSelection(5, true);
setGalleryMovie(true);
super.onPostExecute(result);
}
}
❽ Android 怎样实现图片放大缩小,上一页,下一页
用AsynTask加载网络图片,可以看下我以前发的博客http://code.eoe.cn/1965.html。下载网络图片的代码写在MainActivity.java里面的private class DownloadTask extends AsyncTask<String, Integer, List<RowItem> >{}