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
- 146.banner图
- banner 图切换
- SpringBoot 更换Banner图
- banner图的开发
- banner图失真解决方案
- banner图无缝滑动
- banner图的第一版
- banner图第二版
- Banner
- banner
- Banner
- Banner
- Banner
- banner
- banner
- banner
- banner
- banner
- Educational Codeforces Round 20 A
- PAT_乙级_1014
- AutoLayout 使用之代码实现(VFL)
- NYOJ16-矩形嵌套
- script标签的defer和async属性
- 146.banner图
- 编译运行sdl
- uGUI知识点剖析之RectTransform
- |工作总结|2017年4月30日
- iOS开发之阴影效果
- 4月30日,PassPara,每日20行。
- 【计算机图形】画直线与画圆
- Php图片验证码显示不出来的解决过程
- numpy基本用法