关于view的自定义viewpager

来源:互联网 发布:淘宝宝贝类目不能修改 编辑:程序博客网 时间:2024/05/16 08:47

自定义viewpager的Auto方法

package com.bwie.week01;

import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewParent;
import android.widget.LinearLayout;

import com.bwie.week01.adapter.MyPagerAdapter;

import java.util.Timer;
import java.util.TimerTask;

/**
 * Created by 老北城 on 2017/12/02.
 */

public class AutoBanner extends LinearLayout implements ViewPager.OnPageChangeListener{
    private ViewPager vp;
    private Timer timer;
    private int curentPager=0;
    private Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            vp.setCurrentItem(curentPager);
        }
    };
    public AutoBanner(Context context) {
        this(context,null);
    }
    public AutoBanner(Context context, AttributeSet attrs) {
        this(context, attrs,0);
    }
    public AutoBanner(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        //自定义属性
        View view=View.inflate(context,R.layout.viewpager_layout,this);
        //在这找到这个控件
        vp = (ViewPager) view.findViewById(R.id.vp);
        //为控件设置改变事件
        vp.addOnPageChangeListener(this);

        timer = new Timer();
    }
    public void setAdapter(MyPagerAdapter myPagerAdapter){
        vp.setAdapter(myPagerAdapter);
    }
    public void startAuto(){
        //开始定时器
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                ++curentPager;
                handler.sendEmptyMessage(0);
                Log.i("123",curentPager+"q");
            }
        },0,3000);
    }
    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

    }
    @Override
    public void onPageSelected(int position) {

    }
    @Override
    public void onPageScrollStateChanged(int state) {

    }
}

然后在main方法里面调用设配器并解析数据
package com.bwie.week01;

import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

import com.bwie.week01.adapter.MyPagerAdapter;
import com.bwie.week01.bean.User;
import com.bwie.week01.bean.Vplist;
import com.google.gson.Gson;

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 MainActivity extends AppCompatActivity {

    private List<Vplist> list = new ArrayList<Vplist>();
    private AutoBanner autobanner;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initData();
        autobanner = (AutoBanner) findViewById(R.id.autobanner);

        //autobanner.setAdapter(new MyPagerAdapter(this));

        autobanner.startAuto();
    }

    Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            Gson gson = new Gson();
            User jsonBean = gson.fromJson((String) msg.obj, User.class);
            List<User.DataBean> data = jsonBean.getData();
            for (int i = 0; i <data.size() ; i++) {
                String img = data.get(i).getIcon();
                String url = data.get(i).getUrl();

                list.add(new Vplist(img,url));

            }
            autobanner.setAdapter(new MyPagerAdapter(list,MainActivity.this));
        }
    };

    private void initData() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    URL url = new URL("http://120.27.23.105/ad/getAd");
                            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
                    int responseCode = urlConnection.getResponseCode();
                    if(responseCode==200){
                        InputStream inputStream = urlConnection.getInputStream();
                        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
                        StringBuilder builder = new StringBuilder();
                        String stringTemp = "";
                        while((stringTemp=reader.readLine())!=null){
                            builder.append(stringTemp);
                        }
                        Message message = new Message();
                        message.obj = builder.toString();
                        handler.sendMessage(message);
                    }
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }
}


之后就是配置适配器了  也是最重要的,最后记得要把他们放到container.addView(view);里面
package com.bwie.week01.adapter;

import android.content.Context;
import android.content.Intent;
import android.support.v4.view.PagerAdapter;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

import com.bwie.week01.Main2Activity;
import com.bwie.week01.MainActivity;
import com.bwie.week01.R;
import com.bwie.week01.bean.Vplist;
import com.nostra13.universalimageloader.core.ImageLoader;

import java.util.List;

/**
 * Created by 老北城 on 2017/12/02.
 */

public class MyPagerAdapter extends PagerAdapter {

    private List<Vplist> list;
    private Context context;

    public MyPagerAdapter(List<Vplist> list, Context context) {
        this.list = list;
        this.context = context;
    }



    //设置构造方法
    @Override
    public int getCount() {
        //设置无线轮播的最大值
        return Integer.MAX_VALUE;
    }
    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == object;
    }

    @Override
    public Object instantiateItem(final ViewGroup container, final int position) {
        View view=View.inflate(context, R.layout.img_layout,null);
        ImageView img = (ImageView) view.findViewById(R.id.img);
        ImageLoader.getInstance().displayImage(list.get(position%list.size()).getImg(),img);


        img.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(context, Main2Activity.class);
                intent.putExtra("url",list.get(position).getUrl());
                context.startActivity(intent);

            }
        });
        container.addView(view);
        return view;
    }


    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView((View) object);
    }
}
布局如下
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" tools:context="com.bwie.week01.MainActivity">

    <com.bwie.week01.AutoBanner
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:id="@+id/autobanner"
       ></com.bwie.week01.AutoBanner>

</android.support.constraint.ConstraintLayout>


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v4.view.ViewPager
        android:id="@+id/vp"
        android:layout_width="match_parent"
        android:layout_height="200dp">
    </android.support.v4.view.ViewPager>

</LinearLayout>

中间那个是一个点击事件,点击传值在第二个页面用webview接收直接就是一个页面
只需要在第二个页面里面添加一个webview设置一个id,在main里面找到id然后接收从 第一个页面传过来的值在赋值就可以使用了
方法如下

package com.bwie.week01;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.webkit.WebView;

public class Main2Activity extends AppCompatActivity {

    private WebView wed;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        wed = (WebView) findViewById(R.id.wed);
        Intent intent = getIntent();
        String extra = intent.getStringExtra("url");
        wed.loadUrl(extra);

           }
}

布局如下
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.bwie.week01.Main2Activity">
    <WebView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/wed"
       ></WebView>

</android.support.constraint.ConstraintLayout>





阅读全文
0 0