viewpage小圆点文字轮播
来源:互联网 发布:回家的路 林俊杰 知乎 编辑:程序博客网 时间:2024/05/23 20:31
依赖
glid加载图片
compile 'com.github.bumptech.glide:glide:3.5.2'compile 'com.android.support:support-v4:26.0.0'
主布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.bwei.viewpagelunbo.MainActivity"> <android.support.v4.view.ViewPager android:id="@+id/viewpage" android:layout_width="match_parent" android:layout_height="200dp"> </android.support.v4.view.ViewPager> <LinearLayout android:layout_alignBottom="@id/viewpage" android:layout_width="match_parent" android:layout_height="50dp" android:orientation="vertical" android:padding="8dp" android:background="#77000000"> <TextView android:layout_gravity="center_horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#ffffff" android:textSize="15sp" android:singleLine="true" android:ellipsize="end" android:id="@+id/tv_intro" android:text="我是文本"/> <LinearLayout android:layout_marginTop="5dp" android:id="@+id/dot_layout" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_gravity="center_horizontal"> </LinearLayout> </LinearLayout></RelativeLayout>
适配器布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/image" android:src="@drawable/a" android:scaleType="fitXY"/></LinearLayout>
画小圆点--drawable下
名字dot_focus.xml
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <solid android:color="#f00"/></shape>dot_unfoucs.xml<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <solid android:color="#00f"/></shape>小圆点的选择器selector_dot.xml<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_unfoucs"></item></selector>轮播主类(包含适配器类)
import android.os.Handler;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.TextView;import com.bumptech.glide.Glide;import java.util.ArrayList;public class MainActivity extends AppCompatActivity { private ViewPager viewPager; private TextView tv_intro; private LinearLayout dot_layout; private ArrayList<Ad> list = new ArrayList<Ad>(); /** * 用于设置自动轮播 */ private Handler handler = new Handler(){ public void handleMessage(android.os.Message msg){ viewPager.setCurrentItem(viewPager.getCurrentItem()+1); handler.sendEmptyMessageDelayed(0, 2000); } }; private ArrayList<String> imglist; private ArrayList<String> textlist; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imglist = new ArrayList<>(); textlist = new ArrayList<>(); imglist.add("http://img01.tooopen.com/Downs/images/2010/4/8/sy_20100408112256193519.jpg"); imglist.add("http://www.taopic.com/uploads/allimg/111011/2893-11101109325830.jpg"); imglist.add("http://scimg.jb51.net/allimg/121209/2-1212091UH0339.jpg"); imglist.add("http://pic.58pic.com/58pic/16/62/63/97m58PICyWM_1024.jpg"); imglist.add("http://p3.so.qhimgs1.com/t01f572e39dd47b8d43.jpg"); textlist.add("我是文字1后教师大好河山进度"); textlist.add("我是文字2后教师大好河山进度"); textlist.add("我是文字3后教师大好河山进度"); textlist.add("我是文字4后教师大好河山进度"); textlist.add("我是文字5后教师大好河山进度"); initView(); initData(); initListener(); } //初始化视图 private void initView() { setContentView(R.layout.activity_main); viewPager = (ViewPager)findViewById(R.id.viewpage); tv_intro = (TextView) findViewById(R.id.tv_intro); dot_layout = (LinearLayout)findViewById(R.id.dot_layout); } //初始化数据 private void initData(){ for (int i = 0; i <imglist.size() ; i++) { list.add(new Ad(imglist.get(i),textlist.get(i))) ; } initDots(); viewPager.setAdapter(new MyPagerAdapter()); int centerValue = Integer.MAX_VALUE/2; int value = centerValue % list.size(); //设置viewPager的第一页为最大整数的中间数,实现伪无限循环 viewPager.setCurrentItem(centerValue-value); updateIntroAndDot(); handler.sendEmptyMessageDelayed(0,1000); } //初始化文字下方的圆点 private void initDots() { for (int i=0; i< list.size(); i++) { View view = new View(this); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(10,10); if(i!=0) { params.leftMargin = 5; } view.setLayoutParams(params); view.setBackgroundResource(R.drawable.selector_dot); dot_layout.addView(view); } } //初始化监听器,当页面改变时,更新其相应数据 private void initListener() { viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageSelected(int position) { updateIntroAndDot(); } public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } public void onPageScrollStateChanged(int state) { } }); } //更新数据与圆点 private void updateIntroAndDot(){ int currentPage = viewPager.getCurrentItem() % list.size(); tv_intro.setText(list.get(currentPage).getIntro()); for (int i = 0; i < dot_layout.getChildCount(); i++) dot_layout.getChildAt(i).setEnabled(i==currentPage); } //ViewPager的主体部分 class MyPagerAdapter extends PagerAdapter { /** * 返回多少page */ public int getCount() { return Integer.MAX_VALUE; } /**view滑动到一半时是否创建新的view * true:表示不去创建,使用缓存;false:去重新创建 */ @Override public boolean isViewFromObject(View view, Object object) { return view==object; } /** * 类似于BaseAdapter的getView方法 */ @Override public Object instantiateItem(ViewGroup container, int position) { View view = View.inflate(MainActivity.this, R.layout.adapter_ad, null); ImageView imageView = (ImageView) view.findViewById(R.id.image); Ad ad = list.get(position%list.size()); //imageView.setImageResource(ad.getIconResId()); //imageView.setImageResource(Integer.parseInt(ad.getImg().get(position))); Glide.with(MainActivity.this).load(ad.getImg()).into(imageView); container.addView(view); return view; } /** * @param position:当前需要销毁第几个page * @param object:当前需要销毁的page */ @Override public void destroyItem(ViewGroup container, int position, Object object) { //super.destroyItem(container, position, object); container.removeView((View) object); } }}
图片文字的bean类
public class Ad { //private int iconResId; private String img; private String intro; /*public Ad(int iconResId, String intro) { super(); this.iconResId = iconResId; this.intro = intro; }*/ public Ad(String img, String intro) { this.img = img; this.intro = intro; } /*public int getIconResId() { return iconResId; }*/ public String getImg() { return img; } public void setImg(String img) { this.img = img; } public String getIntro() { return intro; }}
阅读全文
0 0
- viewpage小圆点文字轮播
- viewpage轮播,小圆点的设置
- ViewPage无限轮播+小圆点
- 轮播小圆点
- Viewpage+小圆点
- ViewPage添加小圆点
- 图片轮播+小圆点
- 小圆点+无限轮播
- 无限轮播+小圆点
- 无限轮播+小圆点
- 无线轮播+小圆点
- ViewPager轮播 + 小圆点
- 无限轮播小圆点
- 无线轮播+小圆点
- 小圆点无限轮播
- 无限轮播+小圆点
- 图片轮播小圆点
- android 广告轮播小圆点封装
- hadoop详解
- WebAPI记录发布1
- RBAC权限管理模型
- Eratosthenes筛法(埃氏筛法)
- echarts tooltip信息添加单位
- viewpage小圆点文字轮播
- 解决 Android Studio Debug 调试时一直卡在 waiting for debugger 界面
- java二进制、八进制、十六进制表示法(待续)
- nodejs -- 自定义头部信息
- __attribute__((packed))详解
- tips
- Aliware推出应用配置管理大杀器,分布式架构下配置推送秒级生效
- centos jdk 7.0安装
- Struts2中三种传输方式1