• ViewPage实现幻灯广告墙


     
     

    ViewPage实现幻灯广告墙

    功能简介

    1. 类似幻灯片功能
    2. 自动切换图片
    3. 触摸停止切换图片
    4. 自带标题功能和切换圆点

    核心功能实现方法

    1. 布局
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >


    <FrameLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >


    <android.support.v4.view.ViewPager
    android:id="@+id/vp_text"
    android:layout_width="match_parent"
    android:layout_height="170dp" />


    <!-- 小圆点的布局文件 -->

    <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom"
    android:background="#a000"
    android:orientation="vertical"
    >


    <TextView
    android:id="@+id/tv_title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="20dp"
    android:text="标题"
    android:textColor="#fff"
    android:textSize="18sp" />


    <LinearLayout
    android:id="@+id/ll_container"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal"
    android:orientation="horizontal"
    >
    </LinearLayout>

    </LinearLayout>

    </FrameLayout>

    </LinearLayout>
    2. ViewPage自定义适配器
    /**
    * ViewPage适配器而已
    */

    class myAdatper extends PagerAdapter
    {

    @Override
    public int getCount()
    {
    return count;
    }

    /**
    * 确定是否展示和反对的是否是同一个对象
    */

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

    /**
    * 添加机制。
    */

    @Override
    public Object instantiateItem(ViewGroup container, int position)
    {
    ImageView view = new ImageView(getApplicationContext());
    view.setImageResource(mImage[position % mImage.length]);
    // view.setBackgroundResource(resid) //填充父控件
    container.addView(view);
    return view;
    }

    /**
    * 独特的销毁机制 , 控制内存方式, 用语默认只加载3个页面
    */

    @Override
    public void destroyItem(ViewGroup container, int position, Object object)
    {
    // 移除容器当中的View
    container.removeView((ImageView) object);
    }
    }

    3. helder消息,实现自动切换功能

    这里原理是我们可以通过handler.sendEmptyMessageDelayed(0, 2000)发送延时消息,通过handleMessage接受后,再次发送,类似递归功能。触摸停止使用handler.removeCallbacksAndMessages(null)移除所有消息队列里面的消息实现停止轮播

     Handler handler = new Handler()
    {
    public void handleMessage(android.os.Message msg)
    {
    // 自动跟换轮播图片
    int currentItem = vpteach.getCurrentItem();
    currentItem++;

    vpteach.setCurrentItem(currentItem);
    handler.sendEmptyMessageDelayed(0, 2000);
    };
    };
     
    4. 触摸取消切换
    //设置 触摸停止滚动
    vpteach.setOnTouchListener(new OnTouchListener()
    {

    @Override
    public boolean onTouch(View v, MotionEvent event)
    {
    switch (event.getAction())
    {
    case MotionEvent.ACTION_DOWN:
    //移除所有消息
    handler.removeCallbacksAndMessages(null);
    break;
    case MotionEvent.ACTION_UP:
    handler.sendEmptyMessageDelayed(0, 2000);
    break;
    default:
    break;
    }

    return false;
    }
    });
    5. 文字和圆点跟踪变换

    这里主要是使用监听ViewPagesetOnPageChangeListener事件,来改变TextView文本当中文字

     // 滑动更新标题。 。
    vpteach.setOnPageChangeListener(new OnPageChangeListener()
    {
    // 某一页页被选中时
    @Override
    public void onPageSelected(int position)
    {
    // 滑动设置简介。
    int index = position % mImageDes.length;
    tvTitle.setText(mImageDes[index]);
    ll_contaier.getChildAt(index).setEnabled(true);

    ll_contaier.getChildAt(prePosation).setEnabled(false);
    prePosation = index;

    }

    // 滑动是调用
    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels)
    {

    }

    // 滑动状态改变时。
    @Override
    public void onPageScrollStateChanged(int state)
    {

    }
    });

     6.自己绘制圆点

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="ring"
    >

    <size android:width="5dp"
    android:height="5dp"
    />

    <!-- 圆点原色 -->
    <solid android:color="#CD6090" />
    </shape>

    总结

    Handler , ViewPage, shape,自定义适配器的使用。
    以后自己复习中多注意他们之间的联系可以实现的功能。

    效果

  • 相关阅读:
    Core的学习三:容器的使用实例
    Core的学习二:【四步完成】.Net Core中Log4net的使用,配置,【框架.NET5】
    C#7 的一些新语法
    C#6 的一些新语法
    Core的学习一:Core部署在IIS下
    C# 特性【Attribute】【什么是特性?以及特性的一些修饰】
    C#反射
    泛型 -Generic 【why,原理,与普通方法,object的性能对比如何?泛型类、泛型方法、泛型接口、泛型委托,泛型约束,协变 逆变,泛型缓存】
    springboot通过切面编程实现系统请求操作日志记录
    Linux 【安装配置VM虚拟机】
  • 原文地址:https://www.cnblogs.com/ganwei/p/4827746.html
Copyright © 2020-2023  润新知