Viewpager實現網絡圖片的輪播

//主意:裏面用到了第三方的Xutils.jar包和Imageloader.jar包還用到了訪問網絡,因此要加網絡權限java

<uses-permission android:name="android.permission.INTERNET"/>android

//---------------------主佈局文件---------------------------------------
json

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <RelativeLayout android:layout_width="fill_parent"
        android:layout_height="200dp">
        
        <android.support.v4.view.ViewPager
            android:layout_width="fill_parent"
            android:layout_height="200dp"
            android:id="@+id/vp_viewpager"></android.support.v4.view.ViewPager>
        <LinearLayout android:layout_width="fill_parent"
            android:layout_height="25dp"
            android:id="@+id/ll_LinearLayout"
            android:orientation="horizontal"
            android:layout_alignBottom="@+id/vp_viewpager"
            
            android:gravity="center"></LinearLayout>
    </RelativeLayout>

</LinearLayout>
服務器

 

//-------------在res目錄下新建一個drawable文件夾,在文件夾下建立XML文件,選中shape類型,建立了名字叫dot_focuse.xml和dot_normal.xml---------------------------------網絡

//-------------dot_focuse.xml 中----------------app

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    
 <corners android:radius="9dp"/>
 <solid android:color="#fff"/>
dom


</shape>
ide

//------------------dot_normal.xml中-----------------工具

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    

    <corners android:radius="9dp"/>
    <solid android:color="#88000000"/>
</shape>
佈局

 

//-----------------------自定義的適配器-----------------------------------------

package com.example.lunbo;

import java.util.List;

import android.content.Context;
import android.os.Handler;
import android.support.v4.view.PagerAdapter;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.widget.ImageView;

public class MyPagerAdapter extends PagerAdapter{
    //封裝
    private List<ImageView> imageList;
    private Context context;
    private Handler handler;
    
    //有參構造
    public MyPagerAdapter(List<ImageView> imageList, Context context,
            Handler handler) {
        super();
        this.imageList = imageList;
        this.context = context;
        this.handler = handler;
    }

    @Override
    public int getCount() {
        //返回最大值
        return Integer.MAX_VALUE;
    }

    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
        
        return arg0==arg1;
    }
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
         // 經過控件集合獲取imageView 添加到容器中,並做爲key 返回
                ImageView imageView = imageList.get(position % imageList.size());
                imageView.setOnTouchListener(new OnTouchListener() {
                    @Override
                    public boolean onTouch(View v, MotionEvent event) {
                        switch (event.getAction()) {
                        // 當按下的時候,中止輪播
                        case MotionEvent.ACTION_DOWN:
                            // 移除全部的回調和消息
                            handler.removeCallbacksAndMessages(null);
                            break;
                        // 擡起
                        case MotionEvent.ACTION_UP:
                            handler.sendEmptyMessageDelayed(0, 2000);
                            break;
                        // 取消的時候,繼續開始錄播
                        case MotionEvent.ACTION_CANCEL:
                            handler.sendEmptyMessageDelayed(0, 2000);
                            break;
                        default:
                            break;
                        }
                        //觸摸事件不被消費,true 消費該觸摸事件
                        return true;
                    }
                });
                container.addView(imageView);
                return imageView;
    }
    
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        //移除
        container.removeView((View) object);
    }

}

//------------------bean包中的goods--------------------------------

package com.example.lunbo;

public class Goods {
    private String id;
    private String image;
    public Goods(String id, String image) {
        super();
        this.id = id;
        this.image = image;
    }
    public Goods() {
        super();
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getImage() {
        return image;
    }
    public void setImage(String image) {
        this.image = image;
    }
    @Override
    public String toString() {
        return "Goods [id=" + id + ", image=" + image + "]";
    }
    
    

}

//===============一下是mainActivity中===========================

package com.example.lunbo;

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;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import com.lidroid.xutils.BitmapUtils;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.Log;
import android.view.Menu;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;

public class MainActivity extends Activity {
    private String urlPath = "http://m.yunifang.com/yunifang/mobile/home?random=17257&encode=56f7b9f64804f3c6423bb3ee62eab517";
    private List<Goods> goods = new ArrayList<Goods>();
    private List<ImageView> imageList = new ArrayList<ImageView>();
    private List<ImageView> dotList = new ArrayList<ImageView>();

    private ViewPager vp_viewpager;
    private LinearLayout ll_LinearLayout;
    private MyPagerAdapter adapter;
    
    private Handler handler = new Handler() {
        public void handleMessage(Message msg) {
            switch (msg.what) {
            case 0:
                // 先去獲取到當前條目索引
                int currentItem = vp_viewpager.getCurrentItem();
                // 條目索引+1
                currentItem++;
                // 從新設置給viewPager
                vp_viewpager.setCurrentItem(currentItem);
                // 再調用發延時消息的方法
                sendDelayMessage();
                break;
            case 1:
                // 得到數據
                String text = (String) msg.obj;
                // 解析數據
                tojson(text);
                break;

            default:
                break;
            }
        }

    };
    

    // ------------------------------------
    // 解析數據
    private void tojson(String text) {
        try {
            JSONObject obj = new JSONObject(text);
            JSONObject data = obj.getJSONObject("data");
            JSONArray ad1 = data.getJSONArray("ad1");
            for (int i = 0; i < ad1.length(); i++) {
                JSONObject json = ad1.getJSONObject(i);
                String id = json.getString("id");
                String image = json.getString("image");
                // 把解析的數據添加到集合
                Goods goodss = new Goods(id, image);
                goods.add(goodss);
            }

            // 初始化圖片
            initImageview();
            // 初始化小圓點
            initDots();
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    };

    // -------------------------------
    // 初始化圖片 此方法須要用到第三方的Xuitlsjar包
    private void initImageview() {
        // 先使用xutils的工具類
        BitmapUtils bitmapUtils = new BitmapUtils(this);
        // 遍歷商品的集合
        for (int i = 0; i < goods.size(); i++) {
            // 建立imageView 並經過工具類將圖片設置到控件上
            ImageView imageView = new ImageView(this);
            bitmapUtils.display(imageView, goods.get(i).getImage());
            // 添加到Imageview的集合中
            imageList.add(imageView);
        }

        
        // 設置適配器
        adapter = new MyPagerAdapter(imageList, this, handler);
        vp_viewpager.setAdapter(adapter);

    }
    
    /*
     *  此方法須要用到第三方的Imageloader.jar包
     */
    
    /*// 初始化圖片
        private void initImageview() {
            
            // 遍歷商品的集合
            for (int i = 0; i < goods.size(); i++) {
                // 建立imageView 並經過工具類將圖片設置到控件上
                ImageView imageView = new ImageView(this);
                //bitmapUtils.display(imageView, goods.get(i).getImage());
                ImageLoader.getInstance().init(
                        ImageLoaderConfiguration.createDefault(this));
                DisplayImageOptions options = new DisplayImageOptions.Builder()
                        .cacheInMemory(true).cacheOnDisk(true).build();
                ImageLoader.getInstance().displayImage(
                        goods.get(i).getImage(), imageView, options);
                // 添加到Imageview的集合中
                imageList.add(imageView);
            }

            
            // 設置適配器
            adapter = new MyPagerAdapter(imageList, this, handler);
            vp_viewpager.setAdapter(adapter);

        }*/

    /**
     * 發送延時消息
     */
    private void sendDelayMessage() {
        handler.sendEmptyMessageDelayed(0, 2000);

    }

    // ---------------------------------
    // 初始化小圓點
    private void initDots() {
        dotList.clear();
        for (int i = 0; i < goods.size(); i++) {
            ImageView imageView = new ImageView(this);
            if (i == 0) {
                // 若是是第一張,默認給一個亮的小點
                imageView.setImageResource(R.drawable.dot_focuse);
            } else {
                // 若是不是滴一個,默認給一個暗的小點
                imageView.setImageResource(R.drawable.dot_normal);
            }
            // 設置小點的默認寬高爲20dp 導入LinearLayout包
            LayoutParams params = new LayoutParams(10, 10);
            // 設置小點的間距
            params.setMargins(5, 0, 5, 0);
            ll_LinearLayout.addView(imageView, params);
            // 往小點集合中添加view
            dotList.add(imageView);
        }

    }

    // ------------------------------------

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 找到控件
        vp_viewpager = (ViewPager) findViewById(R.id.vp_viewpager);
        ll_LinearLayout = (LinearLayout) findViewById(R.id.ll_LinearLayout);
        // 得到網絡數據
        huodeshuju();
        
        // 設置初始的展現條目
        vp_viewpager.setCurrentItem(imageList.size() * 1000000);
        // 設置延時切換
        sendDelayMessage();
        // 設置viewpager的滑動監聽事件
        vp_viewpager.setOnPageChangeListener(new OnPageChangeListener() {            @Override            public void onPageSelected(int arg0) {                // 遍歷小點的集合                for (int i = 0; i < dotList.size(); i++) {                    // 若是當前的索引值和i相等                    if (arg0 % dotList.size() == i) {                        // 設置小點爲亮色                        dotList.get(i).setImageResource(R.drawable.dot_focuse);                    } else {                        // 不然暗色                        dotList.get(i).setImageResource(R.drawable.dot_normal);                    }                }            }            @Override            public void onPageScrolled(int arg0, float arg1, int arg2) {                // TODO Auto-generated method stub            }            @Override            public void onPageScrollStateChanged(int arg0) {                // TODO Auto-generated method stub            }        });    }    // 得到網絡數據    private void huodeshuju() {        // 使用線程        new Thread() {            public void run() {                try {                    // 先建立出了一個URL對象,urlPath:是咱們訪問接口地址                    URL url = new URL(urlPath);                    // URL連接對象,經過URL對象打開一個connection連接對像                    HttpURLConnection urlConnection = (HttpURLConnection) url                            .openConnection();                    // 設置urlConnection對象連接超時                    urlConnection.setConnectTimeout(5000);                    // 設置urlConnection對象獲取數據超時                    urlConnection.setReadTimeout(5000);                    // 設置本次urlConnection請求方式                    urlConnection.setRequestMethod("GET");                    // 調用urlConnection的連接方法,線程等待,等待的是服務器所給咱們返回的結果集                    urlConnection.connect();                    // 獲取本次網絡請求的狀態碼                    int code = urlConnection.getResponseCode();                    // 若是本次返回的狀態嗎是200(成功)                    if (code == 200) {                        // 調用urlConnection.getInputStream獲得本次請求所返回的結果流                        InputStream inputStream = urlConnection                                .getInputStream();                        // 建立一個BufferedReader,去讀取結果流                        BufferedReader reader = new BufferedReader(                                new InputStreamReader(inputStream));                        String readLine;                        StringBuffer buffer = new StringBuffer();                        while ((readLine = reader.readLine()) != null) {                            buffer.append(readLine);                        }                        // 讀取完結果流以後所獲得的結果                        String result = buffer.toString();                        Log.i("數據:", result);                        Message message = new Message();                        message.what = 1;                        message.obj = result;                        handler.sendMessage(message);                        inputStream.close();                    }                } catch (MalformedURLException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                } catch (IOException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                }            };        }.start();    }}

相關文章
相關標籤/搜索