项目中需要使用头像可以循环轮播的效果,哈哈,啥也不说,先上效果图,

不要看例子花里胡哨的,其实只是中间那四个头像啊!单独抽出来是右边这样的图片效果,这里是搞了个按钮开启自动更新的任务。

         

要想使用自动轮播头像闪动,首先需要圆形的头像,这个圆形的头像图片使用的是一个叫CircleImageView的开源控件,大家可以参考下面这篇博客,  https://blog.csdn.net/zhoubin1992/article/details/47258639

写的已经非常清晰了,他就是一个CircleImageView.java文件,复制过来这个java文件和一个arrrs.xml文件就可以使用了,目的是将我们提供的各种形状的图片替换成圆形的头像。

具体实现,先看下布局文件,很简单,就是四个上面使用的控件,四个CircleImageView,就这样,木有了:(请忽略这四个图片的名字,太乱了,不想改了o(╥﹏╥)o)

<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:id="@+id/ly_root"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="60dp"android:background="@color/light"><com.example.fake_hago_2.view.CircleImageViewandroid:id="@+id/top_2"android:layout_width="50dp"android:layout_height="50dp"android:layout_toLeftOf="@+id/top_img"android:layout_marginRight="7dp"android:layout_centerInParent="true"android:src="@drawable/pic2"app:civ_border_width="2dp"app:civ_border_color="@color/light" /><com.example.fake_hago_2.view.CircleImageViewandroid:id="@+id/top_img"android:layout_width="50dp"android:layout_height="50dp"android:layout_centerInParent="true"android:src="@drawable/hugh"android:layout_marginRight="7dp"app:civ_border_width="2dp"app:civ_border_color="@color/light" /><com.example.fake_hago_2.view.CircleImageViewandroid:id="@+id/top_3"android:layout_width="50dp"android:layout_height="50dp"android:layout_toRightOf="@+id/top_img"android:layout_marginRight="7dp"android:layout_centerInParent="true"android:src="@drawable/pic3"app:civ_border_width="2dp"app:civ_border_color="@color/light" /><com.example.fake_hago_2.view.CircleImageViewandroid:id="@+id/top_4"android:layout_width="50dp"android:layout_height="50dp"android:layout_centerInParent="true"android:layout_toRightOf="@+id/top_3"android:src="@drawable/pic4"app:civ_border_width="2dp"app:civ_border_color="@color/light" /></RelativeLayout></merge>

接下来要自定义布局啦,我们继承RelativeLayout,然后重写初始化函数,在bindView()里面find到我们的每一个ImageView的Id,因为需要单独控制每个ImageView图片播放动画的时机,这样才有四个图片挨个播放的效果,具体的实现就是从MainActivity中启动我们这个自定义View的函数startFlashAvaterTask(),里面定义一个TimerTask,这个Task每隔两秒,发送四个之间间隔100毫秒的消息,交个Handler处理,handler根据接收到消息的先后顺序去开始四个ImageView各自的动画,大致逻辑就是这样子,具体看代码吧,注释写的比较清楚了:

public class FlashAvaterView extends RelativeLayout{private ImageView top_2;private ImageView top_3;private ImageView top_4;private ImageView mTopImg;private Timer mTimer;private long mIntervalTime = 0;private volatile boolean isRun = true;private static class AnimHandler extends Handler {}//不同时间间隔接受到的消息,播放对应的View的动画private AnimHandler mHandler = new AnimHandler() {@Overridepublic void handleMessage(Message msg) {if (msg.what == 0) {scaleAnimator(top_2);} else if (msg.what == 1) {scaleAnimator(mTopImg);} else if (msg.what == 2) {scaleAnimator(top_3);} else if (msg.what == 3) {scaleAnimator(top_4);}super.handleMessage(msg);}};public FlashAvaterView(Context context) {this(context, null);}public FlashAvaterView(Context context, AttributeSet attrs) {this(context, attrs, 0);}public FlashAvaterView(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);bindViews(context);}private void bindViews(Context context) {LayoutInflater.from(context).inflate(R.layout.flash_avater_view, this, true);if (mTimer == null) {mTimer = new Timer();}top_2 = (CircleImageView) findViewById(R.id.top_2);mTopImg = (CircleImageView) findViewById(R.id.top_img);top_3 = (CircleImageView) findViewById(R.id.top_3);top_4 = (CircleImageView) findViewById(R.id.top_4);}//启动轮播任务的时间点public void startFlashAvaterTask(long time) {if (mTimer == null) {mTimer = new Timer();} else {if (isRun) {mTimer.scheduleAtFixedRate(new MyTask(), 1, 2000);isRun = false;}}}//由于需要四个头像之间播放也有先后顺序,因此设置一个时间间隔,间隔mIntervalTime发送消息给handlerprivate class MyTask extends TimerTask {@Overridepublic void run() {for (int i = 0 ; i < 4; i++) {mIntervalTime += 100;mHandler.sendEmptyMessageDelayed(i, mIntervalTime);}}}//缩小、放大的动画private void scaleAnimator(final ImageView img){final float scale = 0f;AnimatorSet scaleSet = new AnimatorSet();ValueAnimator valueAnimatorSmall = ValueAnimator.ofFloat(1.0f, scale);valueAnimatorSmall.setDuration(200);ValueAnimator valueAnimatorLarge = ValueAnimator.ofFloat(scale, 1.0f);valueAnimatorLarge.setDuration(200);valueAnimatorSmall.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator animation) {float scale = (Float) animation.getAnimatedValue();img.setScaleX(scale);img.setScaleY(scale);}});valueAnimatorLarge.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator animation) {float scale = (Float) animation.getAnimatedValue();img.setScaleX(scale);img.setScaleY(scale);}});scaleSet.play(valueAnimatorSmall).before(valueAnimatorLarge);scaleSet.start();}@Overrideprotected void onDetachedFromWindow() {super.onDetachedFromWindow();}
}

具体怎个用法就很简单了,在XML布局文件中引入这个FlashAvaterView,然后findViewById(),和使用普通控件一样了:

xml中引入:

<com.example.fake_hago_2.view.FlashAvaterViewandroid:id="@+id/flash_avater"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_gravity="center_horizontal" />

java中find它:

FlashAvaterView flashAvaterView = (FlashAvaterView) helper.getView(R.id.flash_avater);
flashAvaterView.startFlashAvaterTask(3000);

项目完整的地址:

https://github.com/buder-cp/base_component_learn/tree/master/circle_small_big

Android圆形头像轮播闪动实现相关推荐

  1. html5圆形头像滚动效果,基于jQuery实现响应式圆形图片轮播特效

    本文实例讲述了基于jQuery实现响应式圆形图片轮播特效代码.分享给大家供大家参考.具体如下: 运行效果截图如下: mislider是一款效果非常酷的jQuery响应式圆形图片轮播图特效插件,misl ...

  2. html5圆形图片轮播,jQuery超酷响应式圆形图片轮播图特效

    mislider是一款效果非常酷的jQuery响应式圆形图片轮播图特效插件.该轮播图特效可以将图片以圆形图片显示,然后使图片无限循环形成轮播图或旋转木马特效.该轮播图插件的特点有: 使用简单 在同一个 ...

  3. Android 视频图片 轮播,详解android 视频图片混合轮播实现

    循环添加视频view  图片view for (int i = 0 ;i if (beansarraylist.get(i).gettype()==1){ videoplayer = new nice ...

  4. Android 圆形头像的两种实现方式

    Android 圆形头像的两种实现方式 前言 这篇博客只是为了做一个记录而已,方便而后查询,核心代码都是直接采用鸿洋博客里面的代码的. 圆形头像在实际开发中实际很常见,一般来说,主要有两种实现方式: ...

  5. Android圆形头像图Circle ImageView

    <Android圆形头像图Circle ImageView> 需要处理的原始图(pic): 使用CircleImageView处理后的图(作为头像): 现在很多的应用都有设置头像的功能,如 ...

  6. HTML圆形立体感轮播图,jQuery超酷响应式圆形图片轮播图特效

    mislider是一款效果非常酷的jQuery响应式圆形图片轮播图特效插件.该轮播图特效可以将图片以圆形图片显示,然后使图片无限循环形成轮播图或旋转木马特效.该轮播图插件的特点有: 使用简单 在同一个 ...

  7. Android 实现图片轮播(仿淘宝首页商品轮播展示)

    一  引用依赖 // 图片轮播图implementation 'com.github.dongjunkun:BannerLayout:1.0.6' 二 创建图片加载工具类 public class G ...

  8. Android 自动广告轮播图

    近来项目忙完了,觉得自己的自动广告轮播 蛮不错的 ,所以分享出来.先说说他的功能,第一能够实现自动轮播 图片 ,第二可以修改自动更换广告条的小点默认是圆形的 可以修改为小的正方向 ,同时 还可以修改 ...

  9. android首页图片轮播效果,Android_Android自动播放Banner图片轮播效果,先看一下效果图支持本地图 - phpStudy...

    Android自动播放Banner图片轮播效果 先看一下效果图 支持本地图片以及网络图片or本地网络混合. 使用方式: android:id="@+id/banner" andro ...

最新文章

  1. IDEA 在线翻译插件
  2. Spring 多线程下注入bean问题
  3. js date转string_JS之你到底是什么类型?
  4. IEEE深度对话Facebook人工智能负责人Yann LeCun:让深度学习摆脱束缚
  5. CodeForces - 1480D2 Painting the Array II(dp)
  6. JavaScript之ajax
  7. mysql表损坏自动修复工具_对MySQL数据表(已损坏)的修复
  8. POJ3664 Election Time【排序】
  9. 算法:回溯十四 Restore IP Addresses数字字符串还原为IP地址(2种解法)
  10. javascript服务器端验证_Blazor对打JavaScript:谁会成为前端应用程序的首选框架?...
  11. 手把手带你玩摄像头模组
  12. wo-mic ,audioRelay设置
  13. 股指期货开户的条件和流程
  14. 多维正态分布与图形识别
  15. VS2008+AnkhSVN搭建源代码管理版本库
  16. 华为nova6se怎么升级鸿蒙,华为EMUI11支持哪些手机
  17. 第五人格获取服务器信息失败,第五人格获取版本信息失败怎么办 获取版本信息失败解决办法[图]...
  18. 利用 android手机DLNA功能,实现手机视频无线播放到电脑、电视
  19. 30行代码用python实现软件翻译
  20. web连接mysql教程视频_jsp servlet mysql实现的Java web在线商城项目源码附带视频指导运行教程...

热门文章

  1. python bisect_Python中bisect的用法及示例详解
  2. Matlab资料汇总暨MATLAB中文论坛帖子整理(三)
  3. 光驱盘符消失之由于其配置信息(注册表中的)不完整或已损坏的解决办法
  4. 博士申请 | 香港科技大学(广州)李佳老师招收数据挖掘方向全奖博士生
  5. 带注释的参考线python可视化_带的解释|带的意思|汉典“带”字的基本解释
  6. hive 静音模式 -S
  7. 0715-铁矿石跌10%
  8. flash上传附件 uploadify3.0详细说明
  9. Shell编程基础语法
  10. mysql 的刷盘策略