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> >{}