当前位置:   article > 正文

Android-桌面小组件RemoteViews播放动画_android桌面小组件动画

android桌面小组件动画

一、前言

前段时间什么比较火?当然是木鱼了,木鱼一敲,烦恼全消~在这个节奏越来越快的社会上,算是一个不错的解压利器!

我们也紧跟时事,推出了  我要敲木鱼(各大市场均可以下载哦~)

咳咳,扯远了,说回正题

我们在后台收到大量反馈,说是希望添加桌面组件敲木鱼功能。好嘛,用户的话就是圣旨,那必须要安排上,正好我也练练手。

老规矩,先来看下我实现的效果

 这个功能看着很简单对吧,却也花了我一天半的时间。主要用来实现敲击动画了!!

二、代码实现

1、新建小组件

 2、修改界面样式

主要会生成3个关键文件(文件名根据你设置的来)
①、APPWidget  类,继承于 AppWidgetProvider,本质是一个 BroadCastReceiver

②、layout/widget.xml ,小组件布局文件

③、xml/widget_info.xml ,小组件信息说明文件

同时会在 AndroidManifest中注册好

类似如下代码:

  1. <receiver
  2. android:name=".receiver.MuyuAppWidgetBig"
  3. android:exported="false">
  4. <intent-filter>
  5. <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
  6. <action android:name="com.fyspring.bluetooth.receiver.action_appwidget_muyu_knock" />
  7. </intent-filter>
  8. <meta-data
  9. android:name="android.appwidget.provider"
  10. android:resource="@xml/app_widget_info_big" />
  11. </receiver>

3、添加敲木鱼逻辑代码

通过 APPWidget 的模板代码我们知道,内部通过 RemoteViews 来进行更新View,而我们都知道 RemoteViews 是无法通过 findViewById 来转成对应的 view,更无法对其添加 Animator。那么我们该怎么办来给桌面木鱼组件添加一个 缩放动画呢?

给你三秒时间考虑下,这里我可花了一天时间来研究....

通过 layoutAnimation !!!

layoutAnimation 是在 ViewGroup 创建之后,显示时作用的,作用时间是:ViewGroup 的首次创建显示,之后再有改变就不行了。

虽然 RemoteViews 不能执行 findViewById,但它提供了两个关键方法: remoteViews.removeAllViews  和  remoteViews.addView 。如果我们在点击时,向组件布局中添加一个带有 layoutAnimation 的布局,不是就可以间接播放动画了么?

关键代码:

  1. private fun doAnimation(context: Context?, remoteViews: RemoteViews?) {
  2. remoteViews?.removeAllViews(R.id.muyu_rl)
  3. val remoteViews2 = RemoteViews(context?.packageName, R.layout.anim_layout)
  4. remoteViews2.setImageViewResource(R.id.widget_muyu_iv, R.mipmap.ic_muyu)
  5. remoteViews?.addView(R.id.muyu_rl, remoteViews2)
  6. }

小组件布局:

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. style="@style/Widget.BlueToothDemo.AppWidget.Container"
  3. android:layout_width="wrap_content"
  4. android:layout_height="wrap_content"
  5. android:background="@drawable/shape_round_bg"
  6. android:theme="@style/Theme.BlueToothDemo.AppWidgetContainer">
  7. <LinearLayout
  8. android:layout_width="140dp"
  9. android:layout_height="140dp"
  10. android:gravity="center_horizontal"
  11. android:orientation="vertical">
  12. <TextView
  13. android:id="@+id/appwidget_text"
  14. android:layout_width="wrap_content"
  15. android:layout_height="wrap_content"
  16. android:layout_centerHorizontal="true"
  17. android:contentDescription="测试桌面木鱼"
  18. android:text="已敲0次"
  19. android:textColor="@color/white"
  20. android:textSize="18sp"
  21. android:textStyle="bold" />
  22. <RelativeLayout
  23. android:id="@+id/muyu_rl"
  24. android:layout_width="match_parent"
  25. android:layout_height="match_parent">
  26. <ImageView
  27. android:id="@+id/widget_muyu_iv"
  28. android:layout_width="match_parent"
  29. android:layout_height="match_parent"
  30. android:layout_centerHorizontal="true"
  31. android:layout_margin="15dp"
  32. android:src="@mipmap/ic_muyu" />
  33. </RelativeLayout>
  34. </LinearLayout>
  35. </RelativeLayout>

添加替换的动画布局(anim_layout.xml),注意两边的木鱼ImgView 的 ID保持一致,因为要统一设置点击事件!!

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="wrap_content"
  4. android:layout_height="wrap_content"
  5. android:layoutAnimation="@anim/muyu_anim">
  6. <ImageView
  7. android:id="@+id/widget_muyu_iv"
  8. android:layout_width="match_parent"
  9. android:layout_height="match_parent"
  10. android:src="@mipmap/ic_muyu2" />
  11. </RelativeLayout>

动画文件:(muyu_anim.xml)

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:animation="@anim/scale_anim"/>

动画文件:(scale_anim.xml)

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <scale xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:duration="100"
  4. android:fromXScale="0.9"
  5. android:fromYScale="0.9"
  6. android:interpolator="@android:anim/accelerate_interpolator"
  7. android:pivotX="50%"
  8. android:pivotY="50%"
  9. android:toXScale="1"
  10. android:toYScale="1" />

关键动画代码就是以上这些,如果有问题欢迎私信。希望大家在新的一年里,木鱼一敲,烦恼全消~

欢迎体验下我做的木鱼,记得搜  我要敲木鱼  哦~~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/313171
推荐阅读
相关标签
  

闽ICP备14008679号