Android BannerView通用封装详解
概述
BannerView
是一种常见的 Android 控件,它可以轮播显示一组图片或文本。为了方便开发者使用,我们可以对 BannerView
进行封装,实现通用的轮播控件,方便在不同的项目中使用。
本文将详细介绍如何封装一个 Android BannerView,并提供两个示例说明。
实现
布局文件
首先,在布局文件中添加 ViewPager
和 Indicator
控件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="200dp">
<android.support.v4.view.ViewPager
android:id="@+id/banner_viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<com.viewpagerindicator.CirclePageIndicator
android:id="@+id/banner_indicator"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true" />
</RelativeLayout>
Adapter
接着,我们需要为 ViewPager
编写一个 Adapter
类,以展示不同页面的内容:
public class BannerAdapter extends PagerAdapter {
private List<View> mViewList;
public BannerAdapter(List<View> viewList) {
mViewList = viewList;
}
@Override
public int getCount() {
return mViewList.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(mViewList.get(position));
return mViewList.get(position);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(mViewList.get(position));
}
}
控制器
为了方便使用,我们还需要编写一个 BannerController
控制器类,以管理 BannerView
的各种功能,包括轮播时间间隔、指示器样式和图片加载等。这里我们只给出一个简单的示例,实现了基本的轮播功能:
public class BannerController {
private final Handler mHandler = new Handler();
private final int INTERVAL = 5000;
private Timer mTimer;
private int mCurrentIndex = 0;
private BannerAdapter mAdapter;
private final ViewPager mViewPager;
private final CirclePageIndicator mIndicator;
private final List<View> mViewList;
public BannerController(ViewPager viewPager, CirclePageIndicator indicator, List<View> viewList) {
mViewPager = viewPager;
mIndicator = indicator;
mViewList = viewList;
}
public void start() {
mAdapter = new BannerAdapter(mViewList);
mViewPager.setAdapter(mAdapter);
mIndicator.setViewPager(mViewPager);
mTimer = new Timer();
mTimer.schedule(new TimerTask() {
@Override
public void run() {
mHandler.post(new Runnable() {
@Override
public void run() {
mCurrentIndex++;
if (mCurrentIndex >= mViewList.size()) {
mCurrentIndex = 0;
}
mViewPager.setCurrentItem(mCurrentIndex, true);
}
});
}
}, INTERVAL, INTERVAL);
}
public void stop() {
if (mTimer != null) {
mTimer.cancel();
}
}
}
初始化
最后,在 Activity 或 Fragment 中初始化 BannerView
:
public class MainActivity extends AppCompatActivity {
private BannerController mBannerController;
private ViewPager mViewPager;
private CirclePageIndicator mIndicator;
private List<View> mViewList;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mViewPager = findViewById(R.id.banner_viewpager);
mIndicator = findViewById(R.id.banner_indicator);
LayoutInflater inflater = LayoutInflater.from(this);
mViewList = new ArrayList<>();
mViewList.add(inflater.inflate(R.layout.banner_item, null));
mViewList.add(inflater.inflate(R.layout.banner_item, null));
mViewList.add(inflater.inflate(R.layout.banner_item, null));
mBannerController = new BannerController(mViewPager, mIndicator, mViewList);
mBannerController.start();
}
@Override
public void onDestroy() {
super.onDestroy();
mBannerController.stop();
}
}
示例说明
示例一
假设我们需要在一个电商类应用中使用 BannerView
展示商品轮播。此时,我们可以在 BannerAdapter
中添加图片加载逻辑,通过网络加载商品图片并展示。
示例二
假设我们需要在一个新闻类应用中使用 BannerView
展示新闻轮播。此时,我们可以在 BannerAdapter
中添加新闻标题和图片逻辑,通过网络加载新闻图片并展示,并在 ViewPager
内添加按钮或链接,点击后可以跳转到对应的新闻页面。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android BannerView通用封装详解 - Python技术站