摘要:本文将带你了解 Android开发图片的方法,希望本文对大家学Android有所帮助。
Android开发图片相关知识解析,用到5个类 向服务器发请求获取图片JSON加载解析到ListView里显示。
Util获取Json
NewsAdapter作为listview适配器
ImageLoader 这个类神奇了 具体功能看代码吧.. 几句话说不完
SelectPictureHandler解析Json (多线程)
PictureActivity 综合内容 进行显示
用到了cache缓存,从Url读取图片信息,再异步加载出来
理解多线程的概念,我在实际操作的时候一个大棚id死活传不进去,后来是忘记了构造函数里有
注:代码有很强的环境特性,用的话需要修改较多
Util类
public class Util { //读取流中的数据 public static byte[] getByte(InputStream is)throws Exception { ByteArrayOutputStream output=new ByteArrayOutputStream(); byte[] buff=new byte[1024]; int len=0; while((len=is.read(buff))!=-1) { output.write(buff, 0, len); } return output.toByteArray(); }
//
发送post请求并接受返回信息 public static String sendPostRequest(String path, Map<string,string> params, String encoding) throws IOException { String result=""; List<namevaluepair> pairs=new ArrayList<namevaluepair>(); if(pairs!=null) { for(Map.Entry<string,string>entry:params.entrySet()){ pairs.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
}
}
UrlEncodedFormEntity entity=new UrlEncodedFormEntity(pairs,encoding); HttpPost post=new HttpPost(path); post.setEntity(entity); DefaultHttpClient client=new DefaultHttpClient(); HttpResponse response=client.execute(post); if(response.getStatusLine().getStatusCode()==200){ result= EntityUtils.toString(response.getEntity()); //获得response数据 } System.out.println(result+"返回信息"); return result;
}
private void parseJson(InputStream instream) throws Exception { byte[]data=Util.getByte(instream); String json=new String(data); System.out.print(json+"json"); if(json.equals("fail")){ }else{ System.out.println(json+"返回信息"); JSONArray array=new JSONArray(json); for(int i=0;i<p>NewsAdapter</p><pre class="brush:java;">public class NewsAdapter extends BaseAdapter implements AbsListView.OnScrollListener { private List<vo.picture> mList; private LayoutInflater mInflater; private ImageLoader imageLoader;
private int mStart,mEnd; public static String[] URLS;//保存所有图片URl地址 private boolean mFirstIn; public NewsAdapter(Context context, List<picture> mList, ListView listview) { super(); this.mList = mList; mInflater =LayoutInflater.from(context); imageLoader=new ImageLoader(listview); URLS=new String[mList.size()]; for(int i=0;i<mlist.size();i++){ abslistview="" convertview="mInflater.inflate(R.layout.activity_picture,null);" imageview="" int="" long="" mend="firstVisibleItem+visibleItemCount;" mfirstin="" mstart="firstVisibleItem;" new="" object="" override="" public="" return="" sb="new" scrollstate="=SCROLL_STATE_IDLE){" string="" stringbuilder="" textview="" todo="" url="mList.get(position).getName();" view="" viewgroup="" viewholder="" viewholder.ivcon="(ImageView)" viewholder.tvcontent="(TextView)" visibleitemcount="" void="">0){ imageLoader.loadImage(mStart,mEnd); mFirstIn=false;
}
}
}<
/mlist.size();i++){></picture></vo.picture></pre> <p>ImageLoader</p> <pre class="brush:java;">public class ImageLoader { private ImageView mImageView; private String mUrl; //创建cache private LruCache<string,bitmap> mCaches; private ListView mListView; private Set<newsasynctask> mTask; public ImageLoader(ListView listview) { mListView=listview; mTask=new HashSet<newsasynctask>(); //获取最大可用内存 int maxMemory=(int) Runtime.getRuntime().maxMemory(); int cacheSize=maxMemory/4; mCaches = new LruCache<string, bitmap=
"">(
cacheSize){ @SuppressLint("NewApi") @Override protected int sizeOf(String key, Bitmap value) { //在每次存入的缓存是调用 return value.getByteCount(); } }; } //将内容保存到Cache中 public void addBitmapToCache(String url,Bitmap bitmap){ //缓存中没有内容,则保存到缓存中 if(getBitmapFromCache(url)==null){ mCaches.put(url,bitmap);
}
}
//从Cache中获取内容
public Bitmap getBitmapFromCache(String url){ return mCaches.get(url); } private Handler mhandler=new Handler(){ @Override public void handleMessage(Message msg) { // TODO 自动生成的方法存根 super.handleMessage(msg); if(mImageView.getTag().equals(mUrl)) mImageView.setImageBitmap((Bitmap)msg.obj
);
}
};
public void showImageByThread(ImageView imageView,final String url){ mImageView=imageView; mUrl=url; new Thread(){ @Override public void run() { // TODO 自动生成的方法存根 super.run(); Bitmap bitmap=getBitmapFromUrl(url); Message message=Message.obtain(); message.obj=bitmap; mhandler.sendMessage(message)
;
}
}.start();
}
public Bitmap getBitmapFromUrl(String urlString){ Bitmap bitmap; InputStream is = null; try { URL url=new URL(urlString); HttpURLConnection connection=(HttpURLConnection) url.openConnection(); is=new BufferedInputStream(connection.getInputStream()); BitmapFactory.Options options=new BitmapFactory.Options(); options.inSampleSize = 2; bitmap=BitmapFactory.decodeStream(is,null,options); connection.disconnect();
return bitmap; } catch (MalformedURLException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } finally{ try { is.close(); } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace();
}
}
return null; } public void showImageByAsyncTask(ImageView imagview,String url){ //先从缓存中取出对应的图片 Bitmap bitmap=getBitmapFromCache(url); //如果缓存中没有,则必须从网络中下载 if(bitmap==null){ //new NewsAsyncTask(imagview,url).execute(url); imagview.setImageResource(R.drawable.ic_launcher); } else{ imagview.setImageBitmap(bitmap);
}
}
//取消加载任务 public void cancelAllTAsks(){ if(mTask!=null){ for(NewsAsyncTask task:mTask){ task.cancel(false); } } } //用于加载从start到end的图片 public void loadImage(int start,int end){ for(int i=start;i<end;i++){ bitmap="=null){" extends="" imageview="" newsasynctask="" private="" string="" task="new" url="NewsAdapter.URLS[i];"> { // public ImageView mimageview;
private String mUrl; public NewsAsyncTask(String murl) { super(); //this.mimageview = mimageview; this.mUrl = murl; } @Override protected Bitmap doInBackground(String... params) { String url=params[0]; //从网络获取图片 Bitmap bitmap=getBitmapFromUrl(url); if(bitmap!=null){ //将不在缓存的图片加入缓存 addBitmapToCache(url, bitmap); } return bitmap; } @Override protected void onPostExecute(Bitmap result) { super.onPostExecute(result);
//
if(mimageview.getTag().equals(murl)) // mimageview.setImageBitmap(result); ImageView imageView=(ImageView) mListView.findViewWithTag(mUrl); if(imageView!=null && result!=null){ imageView.setImageBitmap(result); } mTask.remove(this); } } }</end;i++){></string,></newsasynctask></newsasynctask></string,bitmap></pre> <p>SelectPictureHanlder</p> <pre class="brush:java;">public class SelectPictureHanlder implements Runnable {
private Handler handler; private String flag; private String id; public ArrayList<picture> piclist = new ArrayList<picture>(); public SelectPictureHanlder(Handler handler,String flag,String id) { super(); this.handler = handler; this.flag=flag; this.id = id ; } @Override public void run() { // TODO Auto-generated method stub String result; Map<string, string=""> params=new HashMap<string, string="">();
params.put("flag", flag); try { result=Util.sendPostRequest(Info.path10+id, params, "UTF-8"); if(result.equals("暂无数据")){ handler.sendEmptyMessage(0); } else{ parseJson(result); } } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Exception e) {
//
TODO Auto-generated catch block e.printStackTrace(); } } private void parseJson(String instream) throws JSONException { // TODO Auto-generated method stub if(instream.equals("fail")) { handler.sendEmptyMessage(0); } else{ JSONArray array=new JSONArray(instream); System.out.println(array.length()+"----->"); System.out.println("JSonArray.length"+array.length()+""); for(int i=0;i<p>PictureActivity</p><pre class="brush:java;">public class PictureActivity extends Activity {
private Intent a; private ImageView imgView; private ImageView imgView2; private String dapengid; private Button btn_next; private Handler pic_hdl,handler; private ListView listview; private ArrayList<picture> piclist; private ProgressDialog mDialog; // private FragmentManager manager; // private FragmentTransaction transaction; final String Path="保密" ; private SelectPictureHanlder selectPictureHanlder; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.picture); imgView=(ImageView) findViewById(R.id.imgv); imgView2=(ImageView) findViewById(R.id.imgv2); listview=(ListView)findViewById(R.id.piclist); a = getIntent();
dapengid = a.getStringExtra("id"); // manager = getFragmentManager(); // transaction = manager.beginTransaction(); // final PictureFragment pictureFragment = new PictureFragment(); handler=new Handler() { @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub switch (msg.what) {
case 0: Toast.makeText(PictureActivity.this, "查询请求失败",Toast.LENGTH_LONG).show(); break; case 1:
for(int i=0;i<selectpicturehanlder.piclist.size();i++)>0){
NewsAdapter adapter=new NewsAdapter(PictureActivity.this,selectPictureHanlder.piclist,listview);
listview.setAdapter(adapter); /* listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<!--?--> parent, View view,
int position, long id) {
//
TODO 自动生成的方法存根
ImageView imageview=(ImageView) view.findViewById(R.id.image_p);
imageview.buildDrawingCache(); Bitmap bmap =
imageview.getDrawingCache(); onThumbnailClick(bmap);
}
});*/
}
break;
default:
break;
}
}
};
selectPictureHanlder =new SelectPictureHanlder(handler,"1",dapengid); new Thread(selectPictureHanlder).start(); System.out.println("查询线程已启动"); }
public void onThumbnailClick(Bitmap bmap) { // final AlertDialog dialog = new AlertDialog.Builder(getActivity()).create(); // ImageView imgView = getImageView(bmap); // dialog.setView(imgView); // dialog.show();
//
全屏显示的方法 final Dialog dialog = new Dialog(PictureActivity.this, android.R.style.Theme_Black_NoTitleBar_Fullscreen); ImageView imgView = getImageView(bmap); dialog.setContentView(imgView); dialog.show();
// 点击图片消失
imgView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub dialog.dismiss();
}
});
}
private ImageView getImageView(Bitmap bmap) { ImageView imgView = new ImageView(PictureActivity.this); imgView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); imgView.setImageBitmap(bmap); return imgView;
}
private class ViewHolder{ private ImageView mimageview; private TextView textView; } public Bitmap getUrlImage(String url) { Bitmap img = null; try { URL picurl = new URL(url); HttpURLConnection conn = (HttpURLConnection)picurl.openConnection(); conn.setConnectTimeout(6000); conn.setDoInput(true);
conn.setUseCaches(false); conn.connect(); InputStream is = conn.getInputStream(); try{ is = conn.getInputStream(); BitmapFactory.Options options=new BitmapFactory.Options(); options.inSampleSize = 4; img = BitmapFactory.decodeStream(is,null,options); } catch(Exception e)
{
Toast.makeText(PictureActivity.this, "加载图片过大,请稍后重试",Toast.LENGTH_LONG).show(); } is.close(); } catch (Exception e) { e.printStackTrace(); } return img; } public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode==KeyEvent.KEYCODE_HOME) finish(); if(keyCode==KeyEvent.KEYCODE_BACK){ // Intent intent=new Intent(PictureActivity.this,MainActivity.class
);
//
//
startActivity(intent); finish(); } return false; } }</selectpicturehanlder.piclist.size();i++)></picture></pre> </array.length();i++){></string,></string,></picture></picture></pre> </array.length();i++){></string,string></namevaluepair></namevaluepair><
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之Android频道!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号