編輯:關於Android編程
獲得網絡上圖片的過程:
獲得圖片的Url—>通過Url連接圖片對象—>把讀到的圖片的二進制數據寫入內存—>返回內存中的數據—>顯示出來
首先,我們要添加權限
因為我們要訪問網絡,所以我們要在AndroidManifest.xml文件總添加網絡訪問權限:
package cn.itcast.image; import cn.itcast.service.ImageService; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.Toast; public class MainActivity extends Activity { private EditText pathText; private ImageView imageView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); pathText = (EditText) this.findViewById(R.id.imagepath); imageView = (ImageView) this.findViewById(R.id.imageView); Button button = (Button) this.findViewById(R.id.button); button.setOnClickListener(new ButtonClickListener()); } private final class ButtonClickListener implements View.OnClickListener{ public void onClick(View v) { String path = pathText.getText().toString(); //得到文本框的url路徑 try{ //得到圖片的二進制數據 byte[] data = ImageService.getImage(path); //把圖片轉換成bitmap類型 Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length); imageView.setImageBitmap(bitmap);//顯示圖片 }catch (Exception e) { e.printStackTrace(); Toast.makeText(getApplicationContext(), R.string.error, 1).show(); } } } }然後我們還要配置ImageService.java文件:
package cn.itcast.service; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import cn.itcast.utils.StreamTool; public class ImageService { /** * 獲取網絡圖片的數據 * @param path 網絡圖片路徑 * @return */ public static byte[] getImage(String path) throws Exception{ //得到url URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection) url.openConnection();//基於HTTP協議連接對象 conn.setConnectTimeout(5000); conn.setRequestMethod("GET");//設置以get方式提交 if(conn.getResponseCode() == 200){ //如果響應碼等於200就是請求成功 InputStream inStream = conn.getInputStream(); //得到輸入流 return StreamTool.read(inStream); //得到圖片二進制數據 } return null; } }
package cn.itcast.utils; import java.io.ByteArrayOutputStream; import java.io.InputStream; public class StreamTool { /** * 讀取流中的數據 * @param inStream * @return * @throws Exception */ public static byte[] read(InputStream inStream) throws Exception{ ByteArrayOutputStream outStream = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len = 0; while( (len = inStream.read(buffer)) != -1){//inStream.read(buffer)返回int:讀取到的數據長度,當讀到-1就是讀完了 outStream.write(buffer, 0, len); //把讀到的數據寫入內存 } inStream.close(); return outStream.toByteArray(); //返回內存中的數據 } }
因項目需求,做一個有關wifi的Demo,現已經上傳到GitHub 上面地址:https://github.com/git-xuhao/WifiDemo源碼片段packa
實現了一個有趣的小東西:使用自定義View繪圖,一邊畫線,畫出的線條漸漸變淡,直到消失。效果如下圖所示:用屬性動畫或者漸變填充(Shader)可以做到一筆一筆的變化,但要
本來准備在ListView的每個Item的布局上設置一個隱藏的Button,當滑動的時候顯示。但是因為每次只要存在一個Button,發現每個Item上的Button相互間
Android提供alert、prompt、pick-list,單選、多選,progress、time-picker和date-picker對話框,並提供自定義的dial