146.banner图

来源:互联网 发布:rar压缩软件mac版 编辑:程序博客网 时间:2024/06/07 15:13

安卓的banner使用ViewPager实现,但ViewPager预加载机制:最多保存3个page,超过的将需要被销毁掉,需要引入ViewPager的源代码

异常:类明明存在,却报class not found异常解决方法
    右键工程,打开bulid path面板,选择Order And Export,

    将对应jar打钩

主布局文件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" >    <android.support.v4.view.ViewPager        android:id="@+id/viewPager"        android:layout_width="match_parent"    android:layout_height="200dp"        />    <LinearLayout         android:layout_alignBottom="@id/viewPager"        android:layout_width="match_parent"    android:layout_height="wrap_content"    android:orientation="vertical"    android:padding="10dp"    android:background="#55000000"        >        <TextView             android:id="@+id/tv_intro"            android:layout_gravity="center_horizontal"            android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:textColor="#ffffff"    android:singleLine="true"    android:ellipsize="end"    android:textSize="16sp"    android:text="内容"            />        <LinearLayout             android:id="@+id/dot_layout"            android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:orientation="horizontal"    android:layout_gravity="center_horizontal"     android:layout_marginTop="3dp"            ></LinearLayout>    </LinearLayout>  </RelativeLayout>

单个banner的布局item_ad.xml

<?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:orientation="vertical" >        <ImageView        android:id="@+id/image"        android:src="@drawable/a"         android:layout_width="match_parent"android:scaleType="fitXY"        ></ImageView></LinearLayout>

使用了shape来实现轮播图下面的点颜色的改变

res/drawable/selector_dot.xml

<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android" >    <item android:state_enabled="true" android:drawable="@drawable/dot_focus"></item><item android:drawable="@drawable/dot_unfocus"></item></selector>
有焦点的样式res/drawable/dot_focus.xml

<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">    <solid android:color="#ffffff"/></shape>
没有焦点的时候的样式res/drawabel/dot_unfocus.xml

<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">    <solid android:color="#aa000000"/></shape>

页面的逻辑文件MainActivity.java

package com.ldw.banner;import java.util.ArrayList;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.support.v4.view.ViewPager.OnPageChangeListener;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.LinearLayout.LayoutParams;import android.widget.TextView;public class MainActivity extends Activity {private ViewPager viewPager;private TextView tv_intro;private LinearLayout dot_layout;private ArrayList<ad> list = new ArrayList<ad>();//创建广告banner的集合//自动更新bannerprivate Handler handler = new Handler(){public void handleMessage(android.os.Message msg){viewPager.setCurrentItem(viewPager.getCurrentItem() + 1);};};    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        initView();        //添加监听器        initListener();        initData();            }private void initView() {    setContentView(R.layout.activity_main);    viewPager = (ViewPager) findViewById(R.id.viewPager);    tv_intro = (TextView) findViewById(R.id.tv_intro);    dot_layout = (LinearLayout) findViewById(R.id.dot_layout); }private void initListener(){viewPager.setOnPageChangeListener(new OnPageChangeListener(){//页面滚动的时候调用@Overridepublic void onPageScrollStateChanged(int arg0) {//更新页面介绍信息updateIntro();}//page改变的时候调用@Overridepublic void onPageScrolled(int arg0, float arg1, int arg2) {// TODO Auto-generated method stub}//选中的时候调用@Overridepublic void onPageSelected(int arg0) {// TODO Auto-generated method stub}});}    private void initData() {    list.add(new ad(R.drawable.a, "11111111111111"));list.add(new ad(R.drawable.b, "22222222222222"));list.add(new ad(R.drawable.c, "33333333333333"));list.add(new ad(R.drawable.d, "44444444444444"));list.add(new ad(R.drawable.e, "55555555555555"));initDots();viewPager.setAdapter(new MyPageAdapter());//获取到最大整数的一般,用来实现微循环,将最初的0设置成起始页int centerValue = Integer.MAX_VALUE/2;centerValue = centerValue%list.size();//设置一个大数为0的起始页viewPager.setCurrentItem(centerValue);updateIntro();//3s自动更新banner图handler.sendEmptyMessageDelayed(0, 3000);}        //banner的点    private void initDots(){    for(int i = 0; i < list.size(); i++){    View view = new View(this);    //初始化布局的参数宽高    LayoutParams params = new LayoutParams(8, 8);    if( i!=0 ){params.leftMargin = 5;}view.setLayoutParams(params);//使用shape初始化dot图片,设置背景,初始化,默认可用view.setBackgroundResource(R.drawable.selector_dot);dot_layout.addView(view);}    }        //更新文本信息    private void updateIntro(){    //获取当前的页数    int currentPage = viewPager.getCurrentItem();    //填充内容    tv_intro.setText(list.get(currentPage).getIntro());        //更新点的信息,让当前的页的点设置成true是白色    for (int i = 0; i < dot_layout.getChildCount(); i++) {dot_layout.getChildAt(i).setEnabled(i==currentPage);}    }        class MyPageAdapter extends PagerAdapter{    //返回page的数量@Overridepublic int getCount() {//page的数量设置成整数的最大值,实现伪循环return Integer.MAX_VALUE;}//View表示当前的View,Object表示即将展示的View//返回true表示不去创建,使用缓存,false表示重新创建@Overridepublic boolean isViewFromObject(View view, Object object) {// TODO Auto-generated method stubreturn view == object;}//类似BaseAdapter的getView方法//讲述均设置给view@Overridepublic Object instantiateItem(ViewGroup container, int position) {//填充viewPagerView view = View.inflate(MainActivity.this, R.layout.item_ad, null);ImageView imageView = (ImageView) view.findViewById(R.id.image);//取余操作实现循环imageView.setImageResource(list.get(position%list.size()).getIconResId());//一定不能少,将view加入到viewPager中container.addView(view);return view;} //销毁page//postion表示要销毁的第几个page,remove方法销毁@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {// TODO Auto-generated method stub//super.destroyItem(container, position, object);//销毁viewcontainer.removeView((View) object);}    }}

banner的bean文件ad.java

package com.ldw.banner;/* * 封装广告图片 */public class ad {private int iconResId;private String intro;public ad(int iconResId, String intro) {super();this.iconResId = iconResId;this.intro = intro;}public int getIconResId() {return iconResId;}public void setIconResId(int iconResId) {this.iconResId = iconResId;}public String getIntro() {return intro;}public void setIntro(String intro) {this.intro = intro;}}






0 0
原创粉丝点击