用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>
- 用viewpager实现网络图片的加载并滑动
- ViewPager网络加载图片并无限轮播实现
- 【Android】 Viewpager+Fragment实现滑动图片的动态加载
- viewpager+定时器实现图片的上下滑动并播放音乐
- android的ViewPager实现加载网络图片并自动轮播
- ViewPager+RadioGroup 实现网络加载图片的轮播
- viewPager+photoView实现网络图片加载左右滑动+手势缩放功能+滑动到下一页其他页面恢复默认大小
- Android 实现可以自由移动缩放的图片控件并实现ViewPager滑动
- ViewPager加载网络图片
- ViewPager网络加载图片
- viewpager+fragment嵌套viewpager图片广告导致广告图片不能滑动的问题用LinearLayout实现
- Android开发实现网络加载多张图片并可以滑动
- android viewPager 实现图片无限循环滑动并带有进度的自定义布局
- ViewPager加载图片滑动卡顿的问题
- Android实现滑动图片(ViewPager)
- viewPager实现图片左右滑动
- ViewPager+动态加载网络图片
- Volley+ViewPager加载网络图片
- poj 1236 Network of Schools(tarjan 缩点)
- linux内存管理器子系统
- C++中建立对象间消息连接的一种系统方法——回调函数
- [dfs序+线段树] codeforces 343D. Water Tree
- vertica-ksafe
- 用viewpager实现网络图片的加载并滑动
- Docker 建私有库
- 2016.5.25(2)
- Java IO - Reader&Writer
- bash 起别名
- MySQL远程root登录
- 第12周项目3:数组类运算的实现
- Dockerfile、Docker镜像和Docker容器的关系
- RecyclerView 简单实现拖拽和滑动