国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android傳遞Bitmap對(duì)象在兩個(gè)Activity之間

2020-04-11 10:58:59
字體:
供稿:網(wǎng)友

通過內(nèi)部存儲(chǔ)方式實(shí)現(xiàn)了在兩個(gè)Activity之間傳遞Bitmap對(duì)象以及其它支持串行化的Java對(duì)象,關(guān)鍵點(diǎn)有如下:

1.  HTTP客戶端下載圖片,通過ImageView對(duì)象顯示

2.  把ImageView上的Bitmap對(duì)象從當(dāng)前Activity傳遞到另外一個(gè)Activity中并顯示出來

3.  基于串行化傳遞Java對(duì)象數(shù)據(jù)

首先看我是怎么實(shí)現(xiàn)HTTP客戶端下載圖片,通過異步Task接口實(shí)現(xiàn)HTTP客戶端下載圖片并通過Handler來更新ImageView,代碼如下:

package com.example.sharedemo;  import java.io.IOException; import java.io.InputStream;  import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient;  import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.AsyncTask; import android.os.Handler; import android.os.Message; import android.util.Log;  public class ImageLoadTask extends AsyncTask<String, Void, Bitmap> {   private Handler handler;    public ImageLoadTask(Handler handler) {     this.handler = handler;   }    protected void onPostExecute(Bitmap bitmap) {     Message msg = new Message();     msg.obj = bitmap;     handler.sendMessage(msg);   }    @Override   protected Bitmap doInBackground(String... urls) {     Bitmap bitmap = null;     // create HTTP client     HttpClient httpclient = new DefaultHttpClient();     try {       // GET request       Log.i("image-url", urls[0]);       HttpGet httpRequest = new HttpGet(urls[0]);       HttpResponse httpResponse = httpclient.execute(httpRequest);       if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {         // get entity from response         HttpEntity httpEntity = httpResponse.getEntity();         // read stream         InputStream is = httpEntity.getContent();         bitmap = BitmapFactory.decodeStream(is);         is.close();         Log.i("image", "already get the image by url : " + urls[0]);       }      } catch (ClientProtocolException e) {       e.printStackTrace();     } catch (IOException e) {       e.printStackTrace();     } finally {       httpclient.getConnectionManager().shutdown();     }     return bitmap;   }  } 

在當(dāng)前的Activity中通過按鈕上的事件響應(yīng)實(shí)現(xiàn)切換View到對(duì)應(yīng)的Activity中去,同時(shí)實(shí)現(xiàn)Java串行化數(shù)據(jù)傳遞。MainActivity的代碼如下:

package com.example.sharedemo;  import java.io.ByteArrayOutputStream; import java.io.FileOutputStream;  import android.app.Activity; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.Matrix; import android.graphics.drawable.BitmapDrawable; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView;  public class MainActivity extends Activity implements OnClickListener{   public final static String SHARE_BITMAP_COMMAND = "share-image";   public final static String SHARE_TEXT_DATA_COMMAND = "share-text-data";   private Handler handler;    @Override   protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.activity_main);     setupOnClickListener();   }    private void setupOnClickListener() {     Button bitmapBtn = (Button)this.findViewById(R.id.bitmapShareBtn);     bitmapBtn.setTag(SHARE_BITMAP_COMMAND);     bitmapBtn.setOnClickListener(this);     Button textDataBtn = (Button)this.findViewById(R.id.mapShareBtn);     textDataBtn.setTag(SHARE_TEXT_DATA_COMMAND);     textDataBtn.setOnClickListener(this);     final ImageView imageView = (ImageView)this.findViewById(R.id.imageView1);          handler = new Handler()     {       public void handleMessage(Message msg) {         Bitmap bitmap = (Bitmap)msg.obj;         if(bitmap != null)         {           /*           // 為防止原始圖片過大導(dǎo)致內(nèi)存溢出,這里先縮小原圖顯示,然后釋放原始Bitmap占用的內(nèi)存           Bitmap smallBitmap = zoomBitmap(bitmap, bitmap.getWidth()/ 5, bitmap.getHeight() / 5);           // 釋放資源           bitmap.recycle();           // 顯示圖片           imageView.setImageBitmap(smallBitmap);           imageView.invalidate();           */           imageView.setImageBitmap(bitmap);         }       }     };     ImageLoadTask task = new ImageLoadTask(handler);     task.execute("http://img.blog.csdn.net/20150607143208238");   }      public static Bitmap zoomBitmap(Bitmap bitmap, int width, int height) {     int w = bitmap.getWidth();     int h = bitmap.getHeight();     Matrix matrix = new Matrix();     float scaleWidth = ((float) width / w);     float scaleHeight = ((float) height / h);     matrix.postScale(scaleWidth, scaleHeight); // 不改變?cè)瓉韴D像大小     Bitmap newbmp = Bitmap.createBitmap(bitmap, 0, 0, w, h, matrix, true);     return newbmp;   }    @Override   public void onClick(View v) {     Object tag = v.getTag();     Log.i("command", tag.toString());     if(SHARE_BITMAP_COMMAND.equals(tag))     {       Intent intent = new Intent(this.getApplicationContext(), ImageProcessActivity.class);       ImageView imageView = (ImageView)this.findViewById(R.id.imageView1);       Bitmap bitmap = ((BitmapDrawable)imageView.getDrawable()).getBitmap();       intent.putExtra("selectedImage", bitmap);       intent.putExtra("name", "lena");       intent.putExtra("description", "超級(jí)大美女");       this.startActivity(intent);          }     else if(SHARE_TEXT_DATA_COMMAND.equals(tag))     {       Intent intent = new Intent(this.getApplicationContext(), ImageProcessActivity.class);       ImageView imageView = (ImageView)this.findViewById(R.id.imageView1);       Bitmap bitmap = ((BitmapDrawable)imageView.getDrawable()).getBitmap();       // save it first then pass URI       ImageInfoBean dto = new ImageInfoBean();       String uri = createImageFromBitmap(bitmap);       dto.setDescription("超級(jí)大美女");       dto.setName("lena");       dto.setUri(uri);              intent.putExtra("tiger", dto);       this.startActivity(intent);      }   }      public String createImageFromBitmap(Bitmap bitmap) {     String fileName = "myImage";     try {       ByteArrayOutputStream bytes = new ByteArrayOutputStream();       bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bytes);       FileOutputStream fo = openFileOutput(fileName, Context.MODE_PRIVATE);       fo.write(bytes.toByteArray());       fo.close();     } catch (Exception e) {       e.printStackTrace();       fileName = null;     }     Log.i("fileName", fileName);     return fileName;   } } 

對(duì)應(yīng)另外一個(gè)Activity中實(shí)現(xiàn)讀取與組裝Bitmap對(duì)象顯示的代碼如下:

package com.example.sharedemo;  import java.io.FileNotFoundException;  import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.widget.ImageView; import android.widget.TextView;  public class ImageProcessActivity extends Activity {    @Override   protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.share_info);     backFillData();   }    private void backFillData() {     Object obj = this.getIntent().getExtras().get("tiger");     ImageView imageView = (ImageView)this.findViewById(R.id.imageView1);     TextView text1 = (TextView)this.findViewById(R.id.textView1);     TextView text2 = (TextView)this.findViewById(R.id.textView2);     try {       if(obj != null && obj instanceof ImageInfoBean)       {         ImageInfoBean dto = (ImageInfoBean)obj;         Bitmap bitmap = BitmapFactory.decodeStream(this.openFileInput(dto.getUri()));         imageView.setImageBitmap(bitmap);         imageView.invalidate(); // refresh                  text1.setText("名稱: " + dto.getName());         text2.setText("描述: " + dto.getDescription());         return;       }     } catch (FileNotFoundException e) {       e.printStackTrace();     }          Bitmap bitmap = (Bitmap) this.getIntent().getParcelableExtra("selectedImage");     String name = this.getIntent().getExtras().getString("name");     String description = this.getIntent().getExtras().getString("description");     if(bitmap != null)     {       imageView.setImageBitmap(bitmap);       imageView.invalidate(); // refresh     }     if(name != null)     {       text1.setText("名稱: " + name);     }     if(description != null)     {       text2.setText("描述: " + description);     }   }  } 

對(duì)應(yīng)的Java串行化對(duì)象類代碼如下:

package com.example.sharedemo;  import java.io.Serializable;  public class ImageInfoBean implements Serializable {   /**    *    */   private static final long serialVersionUID = 1L;    public String getName() {     return name;   }    public void setName(String name) {     this.name = name;   }    public String getDescription() {     return description;   }    public void setDescription(String description) {     this.description = description;   }    public String getUri() {     return uri;   }    public void setUri(String uri) {     this.uri = uri;   }    private String name;   private String description;   private String uri;  } 

最后聲明:
別忘記在Manifest文件添加網(wǎng)絡(luò)訪問的權(quán)限

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

第一個(gè)按鈕【傳遞圖片】將會(huì)演示我遇到錯(cuò)誤,第二按鈕【傳遞文本數(shù)據(jù)】
將會(huì)演示正確的處理結(jié)果,顯示如下:

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 丹阳市| 蒙自县| 石台县| 云梦县| 玉龙| 凤翔县| 肃宁县| 怀安县| 金平| 灵璧县| 大石桥市| 定结县| 古交市| 来凤县| 万盛区| 道孚县| 蒙自县| 五华县| 托克托县| 桂东县| 祁东县| 利辛县| 驻马店市| 平遥县| 鹰潭市| 黄陵县| 崇信县| 莒南县| 连山| 乐安县| 多伦县| 邵武市| 瑞昌市| 衡山县| 柳江县| 大城县| 玛曲县| 齐河县| 巫山县| 历史| 余庆县|