Viewpager实现的广告轮播,有文本、有点的联动效果
布局文件
<?xml version="1.0" encoding="utf-8"?>
<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="com.example.administrator.viewpagercarousel.MainActivity">
<android.support.v4.view.ViewPager
android:id="@+id/viewpager1"
android:layout_width="match_parent"
android:layout_height="180dp">
</android.support.v4.view.ViewPager>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/viewpager1"
android:background="@color/back"
android:orientation="vertical"
android:padding="8dp">
<TextView
android:id="@+id/tvTest"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:ellipsize="end"
android:singleLine="true"
android:text="文本内容"
android:textColor="#ffffff"
android:textSize="16sp"/>
<LinearLayout
android:id="@+id/dot"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="3dp"
android:orientation="horizontal">
</LinearLayout>
</LinearLayout>
</RelativeLayout>
代码
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.Log;
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;
import bean.Ad;
public class MainActivity extends Activity {
private List<Ad> adlist;
ViewPager mViewpager1;
TextView mTvTest;
LinearLayout mDot;
//定时器
private Handler h = new Handler() {
public void handleMessage(Message msg) {
mViewpager1.setCurrentItem(mViewpager1.getCurrentItem() + 1);
h.sendEmptyMessageDelayed(0, 3000);//延迟3秒
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initViewpager1();
}
private void initViewpager1() {
//找控件
mViewpager1 = (ViewPager) findViewById(R.id.viewpager1);
mTvTest = (TextView) findViewById(R.id.tvTest);//显示文本的
mDot = (LinearLayout) findViewById(R.id.dot);//显示圆点
//初始化数据
adlist = new ArrayList<Ad>();
adlist.add(new Ad(R.mipmap.b, "第一个。。"));
adlist.add(new Ad(R.mipmap.c, "第二个、、"));
adlist.add(new Ad(R.mipmap.d, "第三个,,,"));
adlist.add(new Ad(R.mipmap.e, "第四个...."));
initDots();//圆点的生成
//为Viewpager1送数据
mViewpager1.setAdapter(new MyViewPager());
int centerValue = adlist.size() / 2; // 求商
int value = centerValue % adlist.size(); //求余
mViewpager1.setCurrentItem(centerValue - value);//设置当前的page页
updateTextAndDot();// 更新文本内容
//Viewpager加监听--联动的效果
mViewpager1.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
//滚动时改变--自动轮播
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
updateTextAndDot();
}
//选中时改变
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
h.sendEmptyMessageDelayed(0, 3000);
}
/**
* 更新文本内容和圆点的状态
*/
private void updateTextAndDot() {
int currentPage = mViewpager1.getCurrentItem() % adlist.size();//得到当前的page页--永远有
mTvTest.setText(adlist.get(currentPage).getText());
// 改变dot
for (int i = 0; i < mDot.getChildCount(); i++) {
mDot.getChildAt(i).setEnabled(i == currentPage);
}
}
/***
* 有几张图片就会产生几个圆点
*/
private void initDots() {
for (int i = 0; i < adlist.size(); i++) {
View view = new View(this);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(16, 16);//圆点的大小
if (i != 0) {
params.leftMargin = 10;//圆点间的距离
}
view.setLayoutParams(params);
view.setBackgroundResource(R.drawable.selector_dot);
mDot.addView(view);
}
}
/**
* 为Viewpager1送数据的适配器
*/
class MyViewPager extends PagerAdapter {
/**
* 返回很大的值使得getView中的position不断增大来实现循环
*/
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
/**
* true表示无需创建 false表示需要创建
*/
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
/**
* 设置view 最多3个界面
*/
@Override
public Object instantiateItem(ViewGroup container, int position) {
Ad ads = adlist.get(position % adlist.size());
View view = View.inflate(MainActivity.this, R.layout.item_image, null);
ImageView image = (ImageView) view.findViewById(R.id.image);
image.setImageResource(ads.getImageId());
container.addView(view);
return view;
}
/**
* 销毁page position:当前要销毁第几个page object:当前需要销毁的page
*/
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
}
}