用viewpager实现网络图片的加载并滑动

来源:互联网 发布:sql update 数据 编辑:程序博客网 时间:2024/05/09 18:42

访问网址代码如下:

   String url="http://192.168.2.178:84/api/NewsList/GetNews?newsId="+id;        Log.d("add", url);        sendRequestWithHttpURLConnection(url);

sendRequestWithHttpURLConnection:

    private void sendRequestWithHttpURLConnection(final String str) {        new Thread(new Runnable() {            @Override            public void run() {                HttpURLConnection connection = null;                try {                    URL url = new URL(str);                    connection = (HttpURLConnection) url.openConnection();                    connection.setRequestMethod("GET");                    connection.setReadTimeout(1000000);                    InputStream in = connection.getInputStream();                    ;                    BufferedReader reader = new BufferedReader(new InputStreamReader(in));                    StringBuilder response = new StringBuilder();                    String line;                    while ((line = reader.readLine()) != null) {                        response.append(line);                    }                    Message message = new Message();                    message.obj = response.toString();                    handler.sendMessage(message);                } catch (MalformedURLException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                } catch (Exception e) {                    e.printStackTrace();                } finally {                        connection.disconnect();                }            }        }).start();    }

用handler异步处理网络请求,解析json数据:

  private Handler handler = new Handler() {        public void handleMessage(Message msg) {            // TODO Auto-generated method stub            super.handleMessage(msg);            String response=(String) msg.obj;            JSONwithJSONObject(response);            news_title.setText(title);            news_date.setText(data);            // list.add(map);            tx.setText(text);        }    };

JSONwithJSONObject:文字以及图片

    private void JSONwithJSONObject(String  jsonData) {        try {            JSONTokener jsonParser = new JSONTokener(jsonData);            JSONObject jsonObject = (JSONObject) jsonParser.nextValue();                title =jsonObject.getString("NewsTitle");                Log.d("tltle",title);                text =jsonObject.getString("NewsText");                Log.d("text",text);                data =jsonObject.getString("NewsDate");                Log.d("Data", data);               JSONObject jsonObj=new JSONObject(jsonData);                 final JSONArray  pic= jsonObj.getJSONArray("NewsPicture");//开启线程下载图片                    new Thread(){                        @Override                        public void run()                        { ArrayList<Drawable> pict=new ArrayList<Drawable>();                            for (int j=0;j<pic.length();j++)                            {                                //   pict.add(pic.get(j).toString());                                try {                                    Log.d("pic", pic.get(j).toString());                                } catch (JSONException e) {                                    e.printStackTrace();                                }                                Drawable pictures=null;                                try {                                     String s= pic.get(j).toString();                                    pict.add(Drawable.createFromStream(new URL(s).openStream(), "image.jpg"));//把网络访问的代码放在这里                                } catch (JSONException e) {                                    e.printStackTrace();                                } catch (MalformedURLException e) {                                    e.printStackTrace();                                } catch (IOException e) {                                    e.printStackTrace();                                }                            }                            Message message = new Message();                            message.obj = pict;                            mhandler.sendMessage(message);                        }                    }.start();           // Log.d("picT",Integer.toString(pict.size()));                }            catch (Exception e){            e.printStackTrace();        }    }

异步更新UI在界面显示:
private Handler mhandler=new Handler() {

    @Override    public void handleMessage(Message msg) {        // TODO Auto-generated method stub        super.handleMessage(msg);        pict  = (ArrayList<Drawable>) msg.obj;        if (pict!=null){            myAdapter=new MyAdapter();            viewPager.setAdapter(myAdapter);}        else {            viewPager.setVisibility(View.GONE);        }    }};viewpager适配器如下:    private class MyAdapter extends PagerAdapter {    private LinearLayout linearLayout;    int i=0;    public MyAdapter() {    }    @Override    public int getCount() {        return pict.size();    }
// 来判断显示的是否是同一张图片,这里我们将两个参数相比较返回即可
    @Override    public boolean isViewFromObject(View view, Object object) {        return view == object;    }

/* 当要显示的图片可以进行缓存的时候,会调用这个方法进行显示图片的初始化,我们将要显示的ImageView加入到ViewGroup中,然后作为返回值返回即可*/
@Override
public Object instantiateItem(ViewGroup container, int position) {
ImageView imageView = new ImageView(ContentActivity.this);
imageView.setImageDrawable(pict.get(position));
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
linearLayout=(LinearLayout)findViewById(R.id.ace);
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (i==0){
news_title.setVisibility(View.INVISIBLE);
news_date.setVisibility(View.INVISIBLE);
tx.setVisibility(View.INVISIBLE);

                    i=1;                }else if (i==1){                    news_title.setVisibility(View.VISIBLE);                    news_date.setVisibility(View.VISIBLE);                    tx.setVisibility(View.VISIBLE);                    i=0;                }            }        });        container.addView(imageView);        return imageView;    }

/* PagerAdapter只缓存三张要显示的图片,如果滑动的图片超出了缓存的范围,就会调用这个方法,将图片销毁*/
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
}
所有代码如下:

package com.youloft.news.activity;import android.app.Activity;import android.content.Context;import android.content.Intent;import android.graphics.drawable.Drawable;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.util.Log;import android.view.View;import android.view.ViewGroup;import android.widget.ArrayAdapter;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.TextView;import com.youloft.news.R;import com.youloft.news.dao.NewsItem;import org.json.JSONArray;import org.json.JSONException;import org.json.JSONObject;import org.json.JSONTokener;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import java.util.ArrayList;import java.util.List;public class ContentActivity extends Activity{    private TextView tx,news_title,news_date;    private ImageView back;    private ViewPager viewPager;     ArrayList<Drawable> pict;    String title,text,data;    private MyAdapter myAdapter;    private Handler handler = new Handler() {        public void handleMessage(Message msg) {            // TODO Auto-generated method stub            super.handleMessage(msg);            String response=(String) msg.obj;            JSONwithJSONObject(response);            news_title.setText(title);            news_date.setText(data);            // list.add(map);            tx.setText(text);        }    };    private Handler mhandler=new Handler() {        @Override        public void handleMessage(Message msg) {            // TODO Auto-generated method stub            super.handleMessage(msg);            pict  = (ArrayList<Drawable>) msg.obj;            if (pict!=null){                myAdapter=new MyAdapter();                viewPager.setAdapter(myAdapter);}            else {                viewPager.setVisibility(View.GONE);            }        }    };    private void JSONwithJSONObject(String  jsonData) {        try {//            JSONArray jsonArray=new JSONArray(jsonData);//           JSONObject jsonObject=jsonArray.getJSONObject(i);            JSONTokener jsonParser = new JSONTokener(jsonData);            JSONObject jsonObject = (JSONObject) jsonParser.nextValue();                title =jsonObject.getString("NewsTitle");                Log.d("tltle",title);                text =jsonObject.getString("NewsText");                Log.d("text",text);                data =jsonObject.getString("NewsDate");                Log.d("Data", data);               JSONObject jsonObj=new JSONObject(jsonData);                 final JSONArray  pic= jsonObj.getJSONArray("NewsPicture");              //  JSONArray pic= jsonObject.getJSONArray("NewsPicture");                    new Thread(){                        @Override                        public void run()                        { ArrayList<Drawable> pict=new ArrayList<Drawable>();                            for (int j=0;j<pic.length();j++)                            {                                try {                                    Log.d("pic", pic.get(j).toString());                                } catch (JSONException e) {                                    e.printStackTrace();                                }                                Drawable pictures=null;                                try {                                     String s= pic.get(j).toString();                                    pict.add(Drawable.createFromStream(new URL(s).openStream(), "image.jpg"));//把网络访问的代码放在这里                                } catch (JSONException e) {                                    e.printStackTrace();                                } catch (MalformedURLException e) {                                    e.printStackTrace();                                } catch (IOException e) {                                    e.printStackTrace();                                }                            }                            Message message = new Message();                            message.obj = pict;                            mhandler.sendMessage(message);                        }                    }.start();           // Log.d("picT",Integer.toString(pict.size()));                }            catch (Exception e){            e.printStackTrace();        }    }public static void actionStart(Context context,String id){    Intent intent=new Intent(context,ContentActivity.class);    intent.putExtra("id", id);    context.startActivity(intent);}    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.frag_news_content);        tx=(TextView)findViewById(R.id.textview);        news_date=(TextView)findViewById(R.id.news_data);        news_title=(TextView)findViewById(R.id.news_title);        back= (ImageView) findViewById(R.id.title_back);        back.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {              finish();            }        });        viewPager=(ViewPager)findViewById(R.id.picture_viewpage);        Intent intent=getIntent();        String id=intent.getStringExtra("id");        Log.d("HHHLK",id);        String url="http://192.168.2.178:84/api/NewsList/GetNews?newsId="+id;        Log.d("add", url);        sendRequestWithHttpURLConnection(url);    }    private class MyAdapter extends PagerAdapter {        private LinearLayout linearLayout;        int i=0;        public MyAdapter() {        }        @Override        public int getCount() {            return pict.size();        }        @Override        public boolean isViewFromObject(View view, Object object) {            return view == object;        }        // 当要显示的图片可以进行缓存的时候,会调用这个方法进行显示图片的初始化,我们将要显示的ImageView加入到ViewGroup中,然后作为返回值返回即可        @Override        public Object instantiateItem(ViewGroup container, int position) {            ImageView imageView = new ImageView(ContentActivity.this);            imageView.setImageDrawable(pict.get(position));            imageView.setScaleType(ImageView.ScaleType.FIT_XY);            linearLayout=(LinearLayout)findViewById(R.id.ace);            imageView.setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View v) {                    if (i==0){                        news_title.setVisibility(View.INVISIBLE);                        news_date.setVisibility(View.INVISIBLE);                        tx.setVisibility(View.INVISIBLE);                        i=1;                    }else if (i==1){                        news_title.setVisibility(View.VISIBLE);                        news_date.setVisibility(View.VISIBLE);                        tx.setVisibility(View.VISIBLE);                        i=0;                    }                }            });            //bitmapUtils.display(imageView, mNewsPicture.get(position));            //   System.out.println("mNewsPicture.get(position)----" + mNewsPicture.get(position));            container.addView(imageView);            // imageView.setOnTouchListener(new PicTouchListener());            return imageView;        }        @Override        public void destroyItem(ViewGroup container, int position, Object object) {            container.removeView((View) object);        }    }    private void sendRequestWithHttpURLConnection(final String str) {        new Thread(new Runnable() {            @Override            public void run() {                HttpURLConnection connection = null;                try {                    URL url = new URL(str);                    connection = (HttpURLConnection) url.openConnection();                    connection.setRequestMethod("GET");                    connection.setReadTimeout(1000000);                    InputStream in = connection.getInputStream();                    ;                    BufferedReader reader = new BufferedReader(new InputStreamReader(in));                    StringBuilder response = new StringBuilder();                    String line;                    while ((line = reader.readLine()) != null) {                        response.append(line);                    }                    Message message = new Message();                    message.obj = response.toString();                    handler.sendMessage(message);                } catch (MalformedURLException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                } catch (Exception e) {                    e.printStackTrace();                } finally {                        connection.disconnect();                }            }        }).start();    }}

所有代码如下:

package com.youloft.news.activity;import android.app.Activity;import android.content.Context;import android.content.Intent;import android.graphics.drawable.Drawable;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.util.Log;import android.view.View;import android.view.ViewGroup;import android.widget.ArrayAdapter;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.TextView;import com.youloft.news.R;import com.youloft.news.dao.NewsItem;import org.json.JSONArray;import org.json.JSONException;import org.json.JSONObject;import org.json.JSONTokener;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import java.util.ArrayList;import java.util.List;public class ContentActivity extends Activity{    private TextView tx,news_title,news_date;    private ImageView back;    private ViewPager viewPager;     ArrayList<Drawable> pict;    String title,text,data;    private MyAdapter myAdapter;    private Handler handler = new Handler() {        public void handleMessage(Message msg) {            // TODO Auto-generated method stub            super.handleMessage(msg);            String response=(String) msg.obj;            JSONwithJSONObject(response);            news_title.setText(title);            news_date.setText(data);            // list.add(map);            tx.setText(text);        }    };    private Handler mhandler=new Handler() {        @Override        public void handleMessage(Message msg) {            // TODO Auto-generated method stub            super.handleMessage(msg);            pict  = (ArrayList<Drawable>) msg.obj;            if (pict!=null){                myAdapter=new MyAdapter();                viewPager.setAdapter(myAdapter);}            else {                viewPager.setVisibility(View.GONE);            }        }    };    private void JSONwithJSONObject(String  jsonData) {        try {//            JSONArray jsonArray=new JSONArray(jsonData);//           JSONObject jsonObject=jsonArray.getJSONObject(i);            JSONTokener jsonParser = new JSONTokener(jsonData);            JSONObject jsonObject = (JSONObject) jsonParser.nextValue();                title =jsonObject.getString("NewsTitle");                Log.d("tltle",title);                text =jsonObject.getString("NewsText");                Log.d("text",text);                data =jsonObject.getString("NewsDate");                Log.d("Data", data);               JSONObject jsonObj=new JSONObject(jsonData);                 final JSONArray  pic= jsonObj.getJSONArray("NewsPicture");              //  JSONArray pic= jsonObject.getJSONArray("NewsPicture");                    new Thread(){                        @Override                        public void run()                        { ArrayList<Drawable> pict=new ArrayList<Drawable>();                            for (int j=0;j<pic.length();j++)                            {                                try {                                    Log.d("pic", pic.get(j).toString());                                } catch (JSONException e) {                                    e.printStackTrace();                                }                                Drawable pictures=null;                                try {                                     String s= pic.get(j).toString();                                    pict.add(Drawable.createFromStream(new URL(s).openStream(), "image.jpg"));//把网络访问的代码放在这里                                } catch (JSONException e) {                                    e.printStackTrace();                                } catch (MalformedURLException e) {                                    e.printStackTrace();                                } catch (IOException e) {                                    e.printStackTrace();                                }                            }                            Message message = new Message();                            message.obj = pict;                            mhandler.sendMessage(message);                        }                    }.start();           // Log.d("picT",Integer.toString(pict.size()));                }            catch (Exception e){            e.printStackTrace();        }    }public static void actionStart(Context context,String id){    Intent intent=new Intent(context,ContentActivity.class);    intent.putExtra("id", id);    context.startActivity(intent);}    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.frag_news_content);        tx=(TextView)findViewById(R.id.textview);        news_date=(TextView)findViewById(R.id.news_data);        news_title=(TextView)findViewById(R.id.news_title);        back= (ImageView) findViewById(R.id.title_back);        back.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {              finish();            }        });        viewPager=(ViewPager)findViewById(R.id.picture_viewpage);        Intent intent=getIntent();        String id=intent.getStringExtra("id");        Log.d("HHHLK",id);        String url="http://192.168.2.178:84/api/NewsList/GetNews?newsId="+id;        Log.d("add", url);        sendRequestWithHttpURLConnection(url);    }    private class MyAdapter extends PagerAdapter {        private LinearLayout linearLayout;        int i=0;        public MyAdapter() {        }        @Override        public int getCount() {            return pict.size();        }        @Override        public boolean isViewFromObject(View view, Object object) {            return view == object;        }        // 当要显示的图片可以进行缓存的时候,会调用这个方法进行显示图片的初始化,我们将要显示的ImageView加入到ViewGroup中,然后作为返回值返回即可        @Override        public Object instantiateItem(ViewGroup container, int position) {            ImageView imageView = new ImageView(ContentActivity.this);            imageView.setImageDrawable(pict.get(position));            imageView.setScaleType(ImageView.ScaleType.FIT_XY);            linearLayout=(LinearLayout)findViewById(R.id.ace);            imageView.setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View v) {                    if (i==0){                        news_title.setVisibility(View.INVISIBLE);                        news_date.setVisibility(View.INVISIBLE);                        tx.setVisibility(View.INVISIBLE);                        i=1;                    }else if (i==1){                        news_title.setVisibility(View.VISIBLE);                        news_date.setVisibility(View.VISIBLE);                        tx.setVisibility(View.VISIBLE);                        i=0;                    }                }            });            container.addView(imageView);            return imageView;        }        @Override        public void destroyItem(ViewGroup container, int position, Object object) {            container.removeView((View) object);        }    }    private void sendRequestWithHttpURLConnection(final String str) {        new Thread(new Runnable() {            @Override            public void run() {                HttpURLConnection connection = null;                try {                    URL url = new URL(str);                    connection = (HttpURLConnection) url.openConnection();                    connection.setRequestMethod("GET");                    connection.setReadTimeout(1000000);                    InputStream in = connection.getInputStream();                    ;                    BufferedReader reader = new BufferedReader(new InputStreamReader(in));                    StringBuilder response = new StringBuilder();                    String line;                    while ((line = reader.readLine()) != null) {                        response.append(line);                    }                    Message message = new Message();                    message.obj = response.toString();                    handler.sendMessage(message);                } catch (MalformedURLException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                } catch (Exception e) {                    e.printStackTrace();                } finally {                        connection.disconnect();                }            }        }).start();    }}

布局:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical" android:layout_width="match_parent"    android:layout_height="match_parent"    >    <include layout="@layout/title"></include>    <ScrollView        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:id="@+id/srcollview"        android:paddingBottom="20dp"        >        <LinearLayout            android:layout_width="match_parent"            android:layout_height="match_parent"            android:id="@+id/ace"            android:orientation="vertical">            <TextView                android:layout_width="match_parent"                android:layout_height="wrap_content"                android:paddingTop="20dp"                android:textSize="20sp"                android:textColor="#ff000000"                android:gravity="center"                android:id="@+id/news_title"/>            <TextView                android:layout_width="match_parent"                android:layout_height="wrap_content"                android:paddingTop="20dp"                android:textSize="8sp"                android:gravity="center"                android:id="@+id/news_data"/>            <android.support.v4.view.ViewPager                android:id="@+id/picture_viewpage"                android:layout_height="250dp"                android:layout_width="match_parent"                android:paddingBottom="10dp"                android:paddingLeft="20dp"                android:paddingRight="20dp"                >            </android.support.v4.view.ViewPager>            <TextView                android:layout_width="match_parent"                android:layout_height="wrap_content"                android:text="正在加载。。。"                android:paddingLeft="10dp"                android:paddingRight="10dp"                android:gravity="center_vertical"                android:lineSpacingMultiplier="1.8"                android:id="@+id/textview"/>        </LinearLayout>    </ScrollView></LinearLayout>
0 0
原创粉丝点击