zoukankan      html  css  js  c++  java
  • 轮播图带加点,带时间自动轮播加手动轮播

    效果图:

    布局分析:

    <?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:id="@+id/activity_main"
    android:layout_width="match_parent" android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="etest.ll.com.mybanner.MainActivity">

    <FrameLayout
    android:layout_width="match_parent"
    android:layout_height="200dp">
    <android.support.v4.view.ViewPager
    android:id="@+id/vp"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    </android.support.v4.view.ViewPager>
    <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="35dp"
    android:layout_gravity="bottom"
    android:background="#33000000"
    android:gravity="center"
    android:orientation="vertical">
    <TextView
    android:id="@+id/tv"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textColor="@android:color/white"
    android:text="图片标题"/>
    <LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="3dp"
    android:orientation="horizontal"
    >
    <View
    android:id="@+id/dot_0"
    android:layout_width="5dp"
    android:layout_height="5dp"
    android:layout_marginLeft="2dp"
    android:layout_marginRight="2dp"
    android:background="@drawable/dot_normal"/>
    <View
    android:id="@+id/dot_1"
    android:layout_width="5dp"
    android:layout_height="5dp"
    android:layout_marginLeft="2dp"
    android:layout_marginRight="2dp"
    android:background="@drawable/dot_normal"/>
    <View
    android:id="@+id/dot_2"
    android:layout_width="5dp"
    android:layout_height="5dp"
    android:layout_marginLeft="2dp"
    android:layout_marginRight="2dp"
    android:background="@drawable/dot_normal"/>
    <View
    android:id="@+id/dot_3"
    android:layout_width="5dp"
    android:layout_height="5dp"
    android:layout_marginLeft="2dp"
    android:layout_marginRight="2dp"
    android:background="@drawable/dot_normal"/>
    </LinearLayout>
    </LinearLayout>
    </FrameLayout>
    </RelativeLayout>

    ========================================

    ===============================

    activity中:

    线程池,用来定时轮播,

    package etest.ll.com.mybanner;

    import android.os.Handler;
    import android.os.Message;
    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.TextView;

    import java.util.ArrayList;
    import java.util.List;
    import java.util.concurrent.Executors;
    import java.util.concurrent.ScheduledExecutorService;
    import java.util.concurrent.TimeUnit;


    public class MainActivity extends AppCompatActivity {
    private ViewPager mPager;
    private ViewPagerAdapter mAdapter;
    private List<ImageView> imageVeiws;//存放图片的集合
    //存放文字描述的集合
    private String[] titles=new String[]{"丽丽1","叫我索大人", "德芙", "我曾经很瘦"};
    private List<View> dots;
    private TextView title;//图片的标题
    private int[] imageIds=new int[]{
    R.drawable.bb,
    R.drawable.cc,
    R.drawable.dd,
    R.drawable.ee
    };
    //记录上一个点的位置
    private int oldPosition=0;
    private int currentItem;
    private ScheduledExecutorService scheduledExecutorService;//线程池,用来定时轮播
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mPager= (ViewPager) findViewById(R.id.vp);
    imageVeiws=new ArrayList<>();
    for (int i = 0; i <imageIds.length ; i++) {
    ImageView imageView=new ImageView(this);
    imageView.setBackgroundResource(imageIds[i]);
    imageVeiws.add(imageView);

    }
    //显示小点的集合
    dots = new ArrayList<>();
    dots.add(findViewById(R.id.dot_0));//单行复制 ctrl + d
    dots.add(findViewById(R.id.dot_1));//单行复制 ctrl + d
    dots.add(findViewById(R.id.dot_2));//单行复制 ctrl + d
    dots.add(findViewById(R.id.dot_3));//单行复制 ctrl + d
    dots.get(0).setBackgroundResource(R.drawable.dot_focesed);//刚进来默认显示的点

    title = (TextView) findViewById(R.id.tv);//显示图片标题
    title.setText(titles[0]);

    mAdapter = new ViewPagerAdapter();
    mPager.setAdapter(mAdapter);

    mPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

    }

    @Override
    public void onPageSelected(int position) {
    //标题的改变
    title.setText(titles[position]);
    //小点的改变
    dots.get(position).setBackgroundResource(R.drawable.dot_focesed);
    dots.get(oldPosition).setBackgroundResource(R.drawable.dot_normal);
    oldPosition=position;//再次改变时候,当前position即为老的position
    currentItem=position;//用于当用户手动滑动轮播图处理
    }

    @Override
    public void onPageScrollStateChanged(int state) {

    }
    });
    }

    @Override
    protected void onStart() {
    super.onStart();
    //开启一个单独的后台线程
    scheduledExecutorService= Executors.newSingleThreadScheduledExecutor();

    //给线程添加一个定时的调度任务
    // Runnable command,
    // long initialDelay,
    // long delay,
    // TimeUnit unit
    //参数说明:延迟initialDelay时间后,开始执行command。
    //并且按照delay时间周期性重复调用
    //TimeUnit用来定义时间单位
    scheduledExecutorService.scheduleWithFixedDelay(new ViewPagerTask(),2,2, TimeUnit.SECONDS);
    }
    private class ViewPagerTask implements Runnable{

    @Override
    public void run() {
    //确定ViewPager跳转到哪个页面
    //使用取余德方式来确定
    currentItem=(currentItem+1)%imageIds.length;
    mhandler.sendEmptyMessage(0);//只是为了调用ui更新,发一个空消息
    }
    }
    private Handler mhandler=new Handler(){
    @Override
    public void handleMessage(Message msg) {
    super.handleMessage(msg);
    //更新viewpager当前显示的pager
    mPager.setCurrentItem(currentItem);
    }
    };

    private class ViewPagerAdapter extends PagerAdapter{
    //获取当前窗体界面的数量
    @Override
    public int getCount() {
    return imageVeiws.size();
    }
    //用于判断是否有对象生成的界面

    @Override
    public boolean isViewFromObject(View view, Object object) {
    return view==object;
    }

    @Override //return一个对象,这个对象表明了pagerAdapter适配器选择哪个对象放入当前的viewPager中
    public Object instantiateItem(ViewGroup container, int position) {
    container.addView(imageVeiws.get(position));
    return imageVeiws.get(position);
    }
    //从Viewgroup中移除当前的view
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
    container.removeView(imageVeiws.get(position));
    }
    }
    }

  • 相关阅读:
    - viewDidLoad 和
    C#实现excel导入到sql server 2008(.net版)
    Windows PE 第十章 加载配置信息
    Windows PE第九章 线程局部存储
    Windows PE第九章 线程局部存储
    Windows PE 第八章 延迟加载导入表
    Windows PE 第八章 延迟加载导入表
    Windows PE资源表编程(枚举资源树)
    Windows PE资源表编程(枚举资源树)
    欺骗的艺术-读后总结
  • 原文地址:https://www.cnblogs.com/ll-ouyang/p/6476821.html
Copyright © 2011-2022 走看看