安卓轮播图的实现(自定义view)
来源:互联网 发布:国外购物网站 知乎 编辑:程序博客网 时间:2024/06/06 02:29
/******************************************************* * @author: wukai * * * * * * @date: 2017/10/12 * * * * @description: * * * * * * @version 1.0 * 主界面设置* * * * * *******************************************************/public class MainActivity extends AppCompatActivity { VerticalText mVerticalText; ArrayList<String> mList; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.dai_main); }}
=============================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"> <LinearLayout android:layout_width="match_parent" android:layout_height="160dp"> <com.slideshow.com.comslideshowcom.SlidSowView android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout></LinearLayout>
==========================================自定义view============================
package com.slideshow.com.comslideshowcom;import android.content.Context;import android.os.Handler;import android.os.Message;import android.support.annotation.AttrRes;import android.support.annotation.NonNull;import android.support.annotation.Nullable;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.util.AttributeSet;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.FrameLayout;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.Toast;import java.util.ArrayList;import java.util.concurrent.Executors;import java.util.concurrent.ScheduledExecutorService;import java.util.concurrent.TimeUnit;/******************************************************* * @author: wukai * * * * * * @date: 2017/10/12 * * * * @description: * * * * * * @version 1.0 * 自定义轮播图* * * * * *******************************************************/public class SlidSowView extends FrameLayout { //自动轮播启用开关 public static final boolean isAutoPlay = true; private Context mContext; ArrayList<String> mList; ArrayList<ImageView> mImageViews; ArrayList<View> mViews; //当前轮播页 private int currentItem = 0; //定时任务 private ScheduledExecutorService mScheduledExecutorService; ViewPager mViewPager; private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { mViewPager.setCurrentItem(currentItem); } }; public SlidSowView(@NonNull Context context) { this(context, null); } public SlidSowView(@NonNull Context context, @Nullable AttributeSet attrs) { this(context, attrs, 0); } public SlidSowView(@NonNull Context context, @Nullable AttributeSet attrs, @AttrRes int defStyleAttr) { super(context, attrs, defStyleAttr); this.mContext = context; //初始化数据 initData(); } private void initData() { mImageViews = new ArrayList<>(); mViews = new ArrayList<>(); //初始化布局 initUI(mContext); //初始化定时任务的方法 initTimer(); } private void initTimer() { mScheduledExecutorService = Executors.newSingleThreadScheduledExecutor(); mScheduledExecutorService.scheduleAtFixedRate(new SlideShowTask(), 1, 5, TimeUnit.SECONDS); /*new SlideShowTask()是一个实现Runnable接口的类,会自动运行里面的run()方法,1的意思就是启动等待时间,这里就是直接运行, 5是5秒,要是想小时,就把TimeUnit.SECONDS TimeUnit.HOURS,分钟是TimeUnit.MINUTES*/ } //执行轮播图切换任务 private class SlideShowTask implements Runnable { @Override public void run() { currentItem = (currentItem + 1) % mImageViews.size(); mHandler.obtainMessage().sendToTarget(); } } private void initUI(Context context) { LayoutInflater.from(context).inflate(R.layout.slidsow, this, true); LinearLayout douLayout = (LinearLayout) findViewById(R.id.linearlatouy_slidsow); douLayout.removeAllViews(); //显示图片 ImageView view1 = new ImageView(mContext); view1.setBackgroundResource(R.drawable.a); ImageView view2 = new ImageView(mContext); view2.setBackgroundResource(R.drawable.b); ImageView view3 = new ImageView(mContext); view3.setBackgroundResource(R.drawable.c); ImageView view4 = new ImageView(mContext); view4.setBackgroundResource(R.drawable.d); mImageViews.add(view1); mImageViews.add(view2); mImageViews.add(view3); mImageViews.add(view4); //小点 for (int i = 0; i < mImageViews.size(); i++) { //初始化轮播图的点击监听事件 mImageViews.get(i).setId(i); mImageViews.get(i).setOnClickListener(new MyListener()); View pointView = new View(mContext); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(10, 10); //初始化圆点以及颜色 if (i == 0) { pointView.setBackgroundResource(R.color.colorAccent); } else { pointView.setBackgroundResource(R.color.colorPrimary); } params.leftMargin = 10; pointView.setLayoutParams(params); mViews.add(pointView); //将小点添加到布局中去 douLayout.addView(pointView, params); } mViewPager = (ViewPager) findViewById(R.id.viewpager_slidsow); //启动适配器 MyPagerAdaapter adaapter = new MyPagerAdaapter(); mViewPager.setFocusable(true); mViewPager.setAdapter(adaapter); //初始化轮播图的滑动监听事件 mViewPager.setOnPageChangeListener(new MyPageChangeListener()); //设置初始化需要显示的条目数 mViewPager.setCurrentItem(0); } //自定义轮播图点击事件 class MyListener implements OnClickListener { @Override public void onClick(View view) { switch (view.getId()) { case 0: Toast.makeText(mContext, "点击的是第一张轮播图!", Toast.LENGTH_SHORT).show(); break; case 1: Toast.makeText(mContext, "点击的是第二张轮播图!", Toast.LENGTH_SHORT).show(); break; case 2: Toast.makeText(mContext, "点击的是第三张轮播图!", Toast.LENGTH_SHORT).show(); break; case 3: Toast.makeText(mContext, "点击的是第四张轮播图!", Toast.LENGTH_SHORT).show(); break; } } } //自定义PageChangeListener class MyPageChangeListener implements ViewPager.OnPageChangeListener { //滑动被调用 @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } //滑动状态被选定 @Override public void onPageSelected(int position) { currentItem = position; for (int i = 0; i < mViews.size(); i++) { if (i == position) { mViews.get(i).setBackgroundResource(R.color.colorAccent); } else { mViews.get(i).setBackgroundResource(R.color.colorPrimary); } } } //滑动状态改变时 @Override public void onPageScrollStateChanged(int state) { } } //自定义PagerAdapter class MyPagerAdaapter extends PagerAdapter { //返回轮播图的最大显示条目数 @Override public int getCount() { return mImageViews.size(); } //判断View是否可复用 @Override public boolean isViewFromObject(View view, Object object) { return view == object; } //返回要显示的条目,并创建条目 @Override public Object instantiateItem(ViewGroup container, int position) { int newPosition = position % mImageViews.size(); ImageView imageView = mImageViews.get(newPosition); container.addView(imageView); return imageView; } //销毁看不到的条目 @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView(mImageViews.get(position)); } }}=======================================xml=============================================
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <android.support.v4.view.ViewPager android:id="@+id/viewpager_slidsow" android:layout_width="match_parent" android:layout_height="match_parent"/> <LinearLayout android:id="@+id/linearlatouy_slidsow" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:gravity="center" android:orientation="horizontal" android:padding="8dp"> </LinearLayout></RelativeLayout>
阅读全文
0 0
- 安卓轮播图的实现(自定义view)
- 自定义View的实现
- 实现自定义的View
- 自定义View的实现
- View (五)自定义View的实现方法
- Android自定义View的实现
- Android自定义View的实现
- android自定义view的实现
- Android 自定义view的实现
- android自定义View的实现
- 实现自定义View的绘制
- Android自定义View的实现
- 自定义View:画布实现自定义View(折线图的实现)
- 实现自定义view的自定义属性
- 自定义View的简单案例(3) 记事本的实现
- 自定义view(四):自定义view实现动态按钮
- Android自定义View的实现方法(四)
- Android (非常重要)如何实现自定义的View
- input输入框聚焦时高度变化的问题
- OkHttp的使用
- 字符串的分割
- iOS 代码规范~避免循环引用
- Heron:Twitter的新一代流处理引擎
- 安卓轮播图的实现(自定义view)
- java 切割文件夹下一定格式的文件名
- layui.table中数据的准备
- perl open函数的使用
- 开发中需要的一些网络判断
- SpringBoot进阶之AOP统一处理http请求日志
- 自定义View学习篇之绘制一个圆环动画
- Node.js学习之内置模块http
- 解决MATLAB出现Warning: Name is nonexistent or not a directory的办法