白羽
2018-06-05
来源 :网络
阅读 1846
评论 0
摘要:本文将带你了解 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频道!
喜欢 | 1
不喜欢 | 0
您输入的评论内容中包含违禁敏感词
我知道了

请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号