android通过url下载图片并实现fragment与activity的图片交互

增加了图片放大缩小功能,一共用到三个类。MainActivity仅作为添加fragment用,其全部代码如:

package com.example.ex_1213_mypic;

import android.os.Bundle;

import android.support.v4.app.FragmentActivity;

import android.support.v4.app.FragmentManager;

import android.support.v4.app.FragmentTransaction;

import android.view.Menu;

public class MainActivity extends FragmentActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

addFragment();//添加片段

}

private void addFragment() {

FragmentManager fm = getSupportFragmentManager();

FragmentTransaction ft = fm.beginTransaction();

MyFragment myFragment = new MyFragment();

ft.add(R.id.fl_replace, myFragment);

ft.commit();

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.main, menu);

return true;

}

}

mainActivity添加完fragment就放寒假了。

先在fragment的xml里添加两张默认图片:

得到所需图片地址,并通过AsyncTask执行下载,将下载完的图片放进声明出来的bitmapList中,全部下载完成后再初始化控件:

package com.example.ex_1213_mypic;

import java.io.IOException;

import java.io.InputStream;

import java.net.HttpURLConnection;

import java.net.MalformedURLException;

import java.net.URL;

import java.util.ArrayList;

import android.content.Intent;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.os.AsyncTask;

import android.os.Bundle;

import android.support.v4.app.Fragment;

import android.view.LayoutInflater;

import android.view.View;

import android.view.View.OnClickListener;

import android.view.ViewGroup;

import android.widget.ImageView;

public class MyFragment extends Fragment implements OnClickListener{

String [] urlList = {

"http://7qn7nu.com1.z0.glb.clouddn.com/77.jpg",

"http://7qn7nu.com1.z0.glb.clouddn.com/u=3516622004,3632540994&fm=59.jpg"

};

private View layout;

ArrayList<Bitmap> bitmapList = new ArrayList<Bitmap>();

public MyFragment() {

// Required empty public constructor

}

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) {

if(layout == null){

layout = getActivity().getLayoutInflater().inflate(R.layout.fragment_my, null);

initBitmap();//下载图片

}else{

ViewGroup parent = (ViewGroup) layout.getParent();

parent.removeView(layout);

}

return layout;

}

private int index;

private void initBitmap() {

MyAsync myAsync = new MyAsync();

if(index < 2){

//下载图片

myAsync.execute(urlList[index]);

}else{

initView();//初始化控件

}

}

AsyncTask下载过程:

class MyAsync extends AsyncTask<String, Void, Bitmap>{

@Override

protected Bitmap doInBackground(String... params) {

URL url;

Bitmap bitmap = null;

try {

url = new URL(params[0]);

//URLConnection con=url.openConnection();

HttpURLConnection con=(HttpURLConnection) url.openConnection();

con.setDoInput(true);

con.connect();

InputStream is=con.getInputStream();

bitmap=BitmapFactory.decodeStream(is);

is.close();

} catch (MalformedURLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return bitmap;

}

@Override

protected void onPostExecute(Bitmap bitmap) {

// TODO Auto-generated method stub

super.onPostExecute(bitmap);

if (bitmap != null) {

if(index < 2){

bitmapList.add(bitmap);

index++;

initBitmap();

}

}

}

}

将下载完成的bitmap显示到控件中:

private void initView() {

ImageView img1 = (ImageView) layout.findViewById(R.id.imageView1);

ImageView img2 = (ImageView) layout.findViewById(R.id.imageView2);

img1.setImageBitmap(bitmapList.get(0));

img2.setImageBitmap(bitmapList.get(1));

img1.setOnClickListener(this);

img2.setOnClickListener(this);

}

这样就可以将网络上的图片正常显示到APP里了,记得添加权限:

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

最后fragment的图片传到MyTouchActivity里。首先在MyTouchActivity写一个方法用来接收图片:

public void getBitmapInfo(Bitmap bitmap, int position){

this.bitmap = bitmap;

this.position = position;

}

执行图片的点击事件时,先new 出MyTouchActivity对象并调用上面所写方法传入图片:

//传出对应的图片到MytouchActivity,同时从当前activity跳转到MytouchActivity

private void initClickBitmap(int x) {

Intent intent = new Intent();

MyTouchActivity touchActivity = new MyTouchActivity();

if(bitmapList.size() > x){

touchActivity.getBitmapInfo(bitmapList.get(x), x);

intent.setClass(getActivity(), MyTouchActivity.class);

startActivity(intent);

}

}

@Override

public void onClick(View v) {

switch (v.getId()) {

case R.id.imageView1:

initClickBitmap(0);

break;

case R.id.imageView2:

initClickBitmap(1);

break;

default:

break;

}

}

在MyTouch里将接收到的bitmap显示出来就可以了。

简单写一个例子,供有需要的朋友参考,新手上路,不足之处请大侠们海涵并多指教哈~

时间: 2024-10-27 02:02:32

android通过url下载图片并实现fragment与activity的图片交互的相关文章

Android中Fragment与Activity之间的交互(两种实现方式)

(未给Fragment的布局设置BackGound) 之前关于Android中Fragment的概念以及创建方式,我专门写了一篇博文<Android中Fragment的两种创建方式>,就如何创建Fragment混合布局做了详细的分析,今天就来详细说道说道Fragment与宿主Activity之间是如何实现数据交互的. 我们可以这样理解,宿主Activity中的Fragment之间要实现信息交互,就必须通过宿主Activity,Fragment之间是不可能直接实现信息交互的. Fragment与

深入分析:Fragment与Activity交互的几种方式(一,使用Handler)

这里我不再详细介绍那写比较常规的方式,例如静态变量,静态方法,持久化,application全局变量,收发广播等等. 首先我们来介绍使用Handler来实现Fragment与Activity 的交互. 第一步,我们需要在Activity中定义一个方法用来设置Handler对象. public void setHandler(Handler handler) { mHandler = handler; } 第二步,在Fragment中的回调函数onAttach()中得到Fragment所在Acti

Android采用HttpClient下载图片

在上一章中谈到Android采用HttpURLConnection下载图片,本章使用HttpClient下载图片 HttpURLConnection与HttpClient的差别: HttpClient是个非常不错的开源框架(org.appache.http),封装了訪问http的请求头,參数,内容体.响应等等,使用起来更方面更强大. HttpURLConnection是java的标准类,能够实现简单的基于URL请求.响应功能,什么都没封装.用起来太原始.比方重訪问的自己定义,以及一些高级功能等.

Android使用HttpURLConnection下载图片

讲到http就必需要了解URI和URL URI (uniform resource identifier)统一资源标志符: URL(uniform resource location )统一资源定位符(或统一资源定位器): 可以理解成URL是URI的子集,URI是一抽象的标识符,URL可以理解成具体的标识符:只要是网络上的资源就能找到唯一的URL. 目录结构 效果图 关键代码 HttpUtils.java类 package com.dzt.downloadimage.utils; import

Android使用HttpClient下载图片

在前一章中讲的是Android使用HttpURLConnection下载图片,这一章使用HttpClient下载图片 HttpURLConnection与HttpClient的区别: HttpClient是个很不错的开源框架(org.appache.http),封装了访问http的请求头,参数,内容体,响应等等,使用起来更方面更强大. HttpURLConnection是java的标准类,可以实现简单的基于URL请求.响应功能,什么都没封装,用起来太原始,比如重访问的自定义,以及一些高级功能等.

Android异步批量下载图片并缓存

前言 本文引自:http://www.xycoding.com/articles/2014/07/29/android-async-images-download/,作者不详 ImagesDownLoad源码下载:DEMO 接触android开发不久,近段时间需实现一个批量下载图片并显示的小功能.在网上搜索了一圈,发现国内外网上异步加载的例子太多太杂,要么是加载大图decode时报OOM异常,要么内存急剧上升不稳定.所以在前辈们的基础上,做了一些优化,特共享出来,欢迎大家指正.这里主要参见了以下

Android 开发中下载的图片 图库中看不到

Android 开发中下载的图片,但是代开图库的时候,不能马上看到图片.是因为android 内部有一个 扫描机制, 你下载之后图片已经存在了,但是没有被扫描到.所以你马上打开图库 看不到 下载的图片: 需啊哟加入下面的 代码 下载完成的hanlder 中处理: 直接调用就可以 MediaScannerConnection.scanFile( ShowBigImage.this, new String[] {url}, null, null);

从url下载图片--java与python实现方式比较

从url下载图片--java与python实现方式比较 博客分类: 技术笔记小点滴 javapython图片下载 一.java的实现方式 首先读取图片 Java代码   //方式一:直接根据url读取图片 private static BufferedImage read(String imageUrl) throws IOException { URL url = new URL(imageUrl); BufferedImage image = ImageIO.read(url); retur

JAVA 通过url下载图片保存到本地

//java 通过url下载图片保存到本地 public static void download(String urlString, int i) throws Exception { // 构造URL URL url = new URL(urlString); // 打开连接 URLConnection con = url.openConnection(); // 输入流 InputStream is = con.getInputStream(); // 1K的数据缓冲 byte[] bs