自定义控件(二)--广告轮播

来源:互联网 发布:出租屋网络方案 编辑:程序博客网 时间:2024/06/03 01:41

广告轮播

接着上一次的这次演示的任然是组合已有的控件来实现新的控件
首先是效果图



这是一个比较常见的效果,广告的轮播效果这里面主要的控件就是使用了Viewpage接下来看一看布局文件
layout/activity_main.xml
<RelativeLayout 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"    tools:context=".MainActivity" >    <RelativeLayout        android:layout_width="match_parent"        android:layout_height="160dp" >        <android.support.v4.view.ViewPager            android:id="@+id/main_ads_viewpage"            android:layout_width="match_parent"            android:layout_height="match_parent" />        <LinearLayout            android:layout_width="match_parent"            android:layout_height="40dp"            android:padding="5dp"            android:orientation="vertical"            android:layout_alignParentBottom="true"            android:gravity="center_horizontal"            android:background="#66000000" >            <TextView                android:id="@+id/tv_desc"                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:textColor="@android:color/white"                android:singleLine="true"                 />                        <LinearLayout                 android:id="@+id/main_llpoint_ll"                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:layout_marginTop="5dp"                android:orientation="horizontal"                ></LinearLayout>        </LinearLayout>    </RelativeLayout></RelativeLayout>

com.example.lql.lopp.MainActivity
package com.example.lql.lopp;import android.os.Bundle;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.TextView;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity {    private ViewPager viewPage;    private int[] Color = {R.color.color1, R.color.color2,R.color.color3, R.color.color4,R.color.color5};    private List<ImageView> imageList;    private LinearLayout points_ll;//points的父容器    private int PreviousPosition = 0;//记录之前的白点的位置    private boolean ISLOOPING = true;    private String[] pageTitle = {            "广告轮回播放页面",            "广告轮回播放页面2",            "广告轮回播放页面3",            "广告轮回播放页面4",            "广告轮回播放页面5"};    private TextView tv_pageTitle;//每一个page页的标题    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initView();        initdata();       initEvent();        initAdapter();        new Thread(){            @Override            public void run() {                super.run();                   while(ISLOOPING){                runOnUiThread(new Runnable() {                    @Override                    public void run() {                        viewPage.setCurrentItem(viewPage.getCurrentItem()+1);                    }                });                       try {                           sleep(2000);                       } catch (InterruptedException e) {                           e.printStackTrace();                       }                   }            }        }.start();    }    private void initAdapter() {        myAdapter adapter = new myAdapter();        viewPage.setAdapter(adapter);    }    private void initEvent() {        viewPage.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {            @Override            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {            }            @Override            public void onPageSelected(int position) {                //设置与page页相对应的点的position为白色                int NewPositon = position%imageList.size();                points_ll.getChildAt(NewPositon).setEnabled(true);                //把上一个的白点变为灰点                points_ll.getChildAt(PreviousPosition).setEnabled(false);                tv_pageTitle.setText(pageTitle[NewPositon]);                PreviousPosition = NewPositon;            }            @Override            public void onPageScrollStateChanged(int state) {            }        });    }    /**     * 初始化数据     */    private void initdata() {        imageList = new ArrayList<>();        ImageView imageView;        ImageView imagPoint;        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(15, 15);//设置宽高        for (int i = 0; i < Color.length; i++) {            imageView = new ImageView(this);            imagPoint = new ImageView(this);            imageView.setBackgroundResource(Color[i]);            imageList.add(imageView);            if (i != 0) params.setMargins(15, 0, 0, 0);            imagPoint.setEnabled(false);//初始化为灰点            imagPoint.setBackgroundResource(R.drawable.ablechoose);            points_ll.addView(imagPoint, params);        }        points_ll.getChildAt(0).setEnabled(true);//初始化第一个点为白色    }    private void initView() {        tv_pageTitle = (TextView) findViewById(R.id.tv_desc);        viewPage = (ViewPager) findViewById(R.id.main_ads_viewpage);        points_ll = (LinearLayout) findViewById(R.id.main_llpoint_ll);    }    /**     * ViewPage的数据与Listview一样来自于Adapter     */    private class myAdapter extends PagerAdapter {        /**         * @param container         * @param position         * @return 返回相应的View        实例化当前的View,添加到contrainer中,然后返回生成的View或关联的Object (用于在isViewFromObject中检查)         */        @Override        public Object instantiateItem(ViewGroup container, int position) {            int NewPosition = position%imageList.size();            ImageView imageView = imageList.get(NewPosition);            container.addView(imageView);            return imageView;        }        /**         * @param container         * @param position         * @param object         * 从container中移除指定的View (释放内存)          */        @Override        public void destroyItem(ViewGroup container, int position, Object object) {            container.removeView((View) object);        }        @Override        public int getCount() {            return Integer.MAX_VALUE;        }        @Override        public boolean isViewFromObject(View view, Object object) {            return view == object;        }    }    @Override    protected void onDestroy() {        super.onDestroy();        ISLOOPING = false;    }}



0 0
原创粉丝点击