​Android开发图片的方法
白羽 2018-06-05 来源 :网络 阅读 67 评论 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
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论
加入IT交流圈
JAVA工程师交流群 +加入
大数据架构师交流群 +加入
人工智能Python交流群 +加入
WEB/H5前端交流群 +加入
大数据岗位高薪定向就业名额  提前锁定高薪职位
移动开发直通车

  • 资料索取

  • 答疑解惑

  • 技术交流

  • 职业测评

  • 面试技巧

  • 高薪秘籍
海同名师推荐 更多>>
张军 联系TA
10年项目开发经验,精通pc、mobile平台软件开发主流技术和框架
杨成江 联系TA
青春为马 不负韶华
翟健 联系TA
熟悉系大型项目开发业务流程,精通C、Java语言
黄骈 联系TA
认证System Analyst,System Architect
程光淼 联系TA
精通C、C++等语言、智能芯片开发
热门就业培训班 更多>>
【零基础】人工智能+Python全栈开发课程
登顶技术风口浪潮巅峰 年薪百万不是梦
【零基础】JavaEE高级开发工程师课程
小白0基础入学 8000起薪轻松进名企
【零基础】大数据与分布式架构师课程
掌握大数据分布式架构 冲击年薪50W+
Android30天热搜词 更多>>
X
免费获取海同IT培训资料
验证码手机号,获得海同独家IT培训资料
获取验证码
提交

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号