viewpage自动轮播

来源:互联网 发布:用excel给数据取对数 编辑:程序博客网 时间:2024/05/13 13:14

xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical">    <RelativeLayout        android:layout_width="match_parent"        android:layout_height="250dp">        <android.support.v4.view.ViewPager            android:layout_width="match_parent"            android:layout_height="250dp"            android:id="@+id/viewpage"            ></android.support.v4.view.ViewPager>        <LinearLayout            android:id="@+id/dot_container"            android:layout_width="match_parent"            android:layout_height="match_parent"            android:orientation="horizontal"            android:gravity="bottom|right"            >        </LinearLayout>    </RelativeLayout>   <ListView       android:id="@+id/listview"       android:layout_width="match_parent"       android:layout_height="match_parent"></ListView></LinearLayout>
//vp子项布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent">    <ImageView        android:id="@+id/vp_itemimg"        android:layout_width="match_parent"        android:layout_height="match_parent" />    <TextView        android:id="@+id/vp_itemtv"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentBottom="true"        android:layout_marginLeft="10dp"        android:text="文字"        android:textColor="@android:color/white" /></RelativeLayout>
//两种点的shape

//白点,灰点省略

<shape xmlns:android="http://schemas.android.com/apk/res/android"    android:shape="oval"    ><corners android:radius="5dp"/>    <solid android:color="@android:color/white"/></shape>
//主Activity
<pre name="code" class="java">public class MainActivity extends AppCompatActivity {    private ViewPager vp;    private ListView lv;    private LinearLayout dot_container;    private List<VpBean.Item> vpDataList;    int currentItem=0;    int oldposition=0;    //Handler    Handler handler=new Handler(){        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            currentItem++;            vp.setCurrentItem(currentItem);        }    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        //初始化控件        initView();        //获得viewpage的适配数据        getVpData();        //获得listview的适配器        getLvData();    }    private void getLvData() {    }    private void getVpData() {        new AsyncTask<String,Void,String>(){            @Override            protected String doInBackground(String... strings) {                try {                    String path=strings[0];                    URL url=new URL(path);                    HttpURLConnection conn = (HttpURLConnection) url.openConnection();                    conn.setRequestMethod("GET");                    conn.setConnectTimeout(5000);                    int code = conn.getResponseCode();                    if(code==200){                        InputStream is = conn.getInputStream();                        String json = StreamTools.readData(is);                        return json;                    }                } catch (Exception e) {                    e.printStackTrace();                }                return null;            }            @Override            protected void onPreExecute() {                super.onPreExecute();            }            @Override            protected void onPostExecute(String s) {                super.onPostExecute(s);                Gson gson=new Gson();                VpBean vpData=gson.fromJson(s,VpBean.class);                //获得适配数据的集合                vpDataList = vpData.items;                //请求数据,加点                adddots();                //适配数据                vp.setAdapter(new PagerAdapter() {                    private TextView vp_tv;                    private ImageView vp_img;                    @Override                    public int getCount() {                        return Integer.MAX_VALUE;                    }                    @Override                    public boolean isViewFromObject(View view, Object object) {                        return view==object;                    }                    @Override                    public Object instantiateItem(ViewGroup container, int position) {                        View view=View.inflate(MainActivity.this,R.layout.vp_item,null);                        //获得控件                        vp_img = (ImageView) view.findViewById(R.id.vp_itemimg);                        vp_tv = (TextView) view.findViewById(R.id.vp_itemtv);                        ImageLoader imageLoader=ImageLoader.getInstance();                        imageLoader.displayImage(vpDataList.get(position%vpDataList.size()).path,vp_img);                        vp_tv.setText(vpDataList.get(position%vpDataList.size()).title);                        container.addView(view);                        return view;                    }                    @Override                    public void destroyItem(ViewGroup container, int position, Object object) {                        //super.destroyItem(container, position, object);                        View view=View.inflate(MainActivity.this,R.layout.vp_item,null);                        container.removeView(view);                    }                });                //定时器                Timer timer=new Timer();                timer.schedule(new TimerTask() {                    @Override                    public void run() {                        Message msg=Message.obtain();                        handler.sendMessage(msg);                    }                },2000,2000);                //vp监听                vp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {                    @Override                    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {                    }                    @Override                    public void onPageSelected(int position) {                        currentItem = position;                        //改变点的颜色                        dot_container.getChildAt(currentItem%vpDataList.size()).setBackgroundResource(R.drawable.dot_white);                        dot_container.getChildAt(oldposition).setBackgroundResource(R.drawable.dot_gray);                        oldposition = currentItem%vpDataList.size();                    }                    @Override                    public void onPageScrollStateChanged(int state) {                    }                });            }        }.execute("http:路径");    }    private void adddots() {        // 加点        for (int i = 0; i < vpDataList.size(); i++) {            View point = new View(MainActivity.this);            if (i == 0) {                point.setBackgroundResource(R.drawable.dot_white);            } else {                point.setBackgroundResource(R.drawable.dot_gray);            }            // 点的大小            int p = 15;            android.widget.LinearLayout.LayoutParams params = new android.widget.LinearLayout.LayoutParams(                    5, 5);// 这里单位是px            // 点的间隔            params.rightMargin = 10;            point.setLayoutParams(params);            // 添加到容器            dot_container.addView(point);        }    }    private void initView() {        setContentView(R.layout.activity_main);        vp = (ViewPager) findViewById(R.id.viewpage);        lv = (ListView) findViewById(R.id.listview);        dot_container = (LinearLayout) findViewById(R.id.dot_container);    }}


先请求数据,动态加点,适配器,timer定时器,viewpage监听







0 0
原创粉丝点击