这回通过RemoteView来制作一个能够接受点击事件的桌面控件。
1. 在res/layout 新建widget文件,这是设计桌面控件的界面

<?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"><ImageView android:id="@+id/imageView1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:layout_alignParentTop="true"android:src="@drawable/sample"/></RelativeLayout>
  1. 在res/xml 新建appwidget_provider_info文件,为了定义桌面控件配置信息,比如设置控件的大小和自动更新时间
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"android:initialLayout="@layout/widget"android:minHeight="84dp"android:minWidth="84dp"android:updatePeriodMillis="86400000"></appwidget-provider>
  1. 新建控件的实现类
public class MyAppWidgetProvider extends AppWidgetProvider {public static final String TAG = "MyAppWidgetProvider";public static final String CLICK_ACTION = "com.example.action.CLICK";private static RemoteViews mRemoteViews;@Overridepublic void onDeleted(Context context,int[] appWidgetIds){super.onDeleted(context, appWidgetIds);Log.i(TAG, "onDeleted");}@Overridepublic void onDisabled(Context context){super.onDisabled(context);Log.i(TAG,"onDisabled");}@Overridepublic void onEnabled(Context context){super.onEnabled(context);Log.i(TAG,"onEnabled");}@Overridepublic void onReceive(final Context context,Intent intent){super.onReceive(context, intent);Log.i(TAG,"onReceive : action = "+intent.getAction());if (intent.getAction().equals(CLICK_ACTION)){Toast.makeText(context,"clicked it",Toast.LENGTH_SHORT).show();new Thread(new Runnable() {@Overridepublic void run() {Bitmap srcbBitmap = BitmapFactory.decodeResource(context.getResources(),R.drawable.sample);for(int i=0;i<20;i++){float degree = (i*90)%360;mRemoteViews.setImageViewBitmap(R.id.imageView1, rotateBitmap(context, srcbBitmap, degree));Intent intentClick = new Intent();intentClick.setAction(CLICK_ACTION);PendingIntent pendingIntent = PendingIntent.getBroadcast(context,0,intentClick,0);mRemoteViews.setOnClickPendingIntent(R.id.imageView1, pendingIntent);AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);appWidgetManager.updateAppWidget(new ComponentName(context,MyAppWidgetProvider.class),mRemoteViews);try{Thread.sleep(100);}catch (InterruptedException e){e.printStackTrace();}}}}).start();}}@Overridepublic void onUpdate(Context context,AppWidgetManager appWidgetManager,int[] appWidgetIds){super.onUpdate(context, appWidgetManager, appWidgetIds);Log.i(TAG,"onUpdate");final int counter = appWidgetIds.length;Log.i(TAG,"counter = "+counter);for(int i=0;i<counter;i++){int appWidgetId = appWidgetIds[i];onWidgetUpdate(context,appWidgetManager,appWidgetId);}}private Bitmap rotateBitmap(Context context,Bitmap srcbBitmap,float degree){Matrix matrix = new Matrix();matrix.reset();matrix.setRotate(degree);Bitmap tmpBitmap = Bitmap.createBitmap(srcbBitmap,0,0,srcbBitmap.getWidth(),srcbBitmap.getHeight(),matrix,true);return tmpBitmap;}private void onWidgetUpdate(Context context,AppWidgetManager appWidgetManager,int appWidgetId){Log.i(TAG,"appWidgetId = "+appWidgetId);mRemoteViews = new RemoteViews(context.getPackageName(),R.layout.widget);Intent intentClick = new Intent();intentClick.setAction(CLICK_ACTION);PendingIntent pendingIntent = PendingIntent.getBroadcast(context,0,intentClick,0);mRemoteViews.setOnClickPendingIntent(R.id.imageView1,pendingIntent);appWidgetManager.updateAppWidget(appWidgetId,mRemoteViews);}
}
  1. 在AndroidManifest声明控件,这个声明将实现类和widget联系在一起,并声明这是一个能够更新和反馈点击事件的桌面小部件,
<receiver
    android:name=".MyAppWidgetProvider"android:icon="@mipmap/ic_launcher" ><meta-data
        android:name="android.appwidget.provider"android:resource="@xml/appwidget_provider_info" ></meta-data><intent-filter><action android:name="com.example.action.CLICK" /><action android:name="android.appwidget.action.APPWIDGET_UPDATE" /></intent-filter>
</receiver>

再见

Android RemoteView的应用 一 桌面控件相关推荐

  1. android 带清除功能的输入框控件

    今天,看到一个很好的自定义输入框控件,于是记录一下. 效果很好: 一,自定义一个类,名为ClearEditText package com.example.clearedittext;import a ...

  2. Android CardView卡片布局 标签: 控件

    CardView介绍 CardView是Android 5.0系统引入的控件,相当于FragmentLayout布局控件然后添加圆角及阴影的效果:CardView被包装为一种布局,并且经常在ListV ...

  3. Android设置text按钮,安卓基础控件使用(TextView、Button、ImageView、EditText)

    一.文本控件TextView 1.布局文件 android:text="@string/content" android:layout_width="wrap_conte ...

  4. android tv nugat,GitHub - GongXunYoung/Android-tv-widget: Android tv,盒子,投影仪 控件

    Android TV 开发框架 QQ群:522186932 Leanback 框架(类似谷歌的Leanback,更简直,更方便): 键盘框架: 菜单框架: 整体目录结构 *AndroidTvWidet ...

  5. android textview动态居中,android 设置textview文字居中或者控件居中

    有2种方法可以设置TextView文字居中: 一:在xml文件设置:android:gravity="center" 二:在程序中设置:txtTitle.setGravity(Gr ...

  6. android 3d布局轮播,android 图片/视频混合轮播控件banner

    android 图片/视频混合轮播控件banner 在youth5201314的图片轮播控件做的修改 原作者github地址:https://github.com/youth5201314/banne ...

  7. Android 仿微信语音录音小控件

    Android 仿微信语音录音小控件 前段时间一直在做IM聊天这方面的撸码工作,涉及到了很多小控件,有时间我会慢慢给大家分享一下我的小成果,希望大家一起学习,一起进步,今天来和大家来说一下Androi ...

  8. Android如何设置按钮图片(控件图片)大小自适应

    Android如何设置按钮图片(控件图片)大小自适应 在你的button中放入图片:drawble属性,你可以选择它的位置上下左右, 如何让图片自适应? 把图片放入res-drawable-mipma ...

  9. Android Studio 线性布局Linearlayout的控件位置控制l属性Layout_margin失效问题解决

    Android Studio 线性布局Linearlayout的控件位置控制l属性Layout_margin失效问题解决 问题:如layout_marginRight ="50dp" ...

最新文章

  1. UC 伯克利华人一作:卷积让视觉 Transformer 性能更强,ImageNet 继续刷点!
  2. 区块链:游戏规则的改变者
  3. Python字典中你必须知道的用法
  4. sockaddr类型重定义
  5. 150W光速秒充!realme真我GT Neo3正式发布 售价1999元起
  6. [转载] css border-collapse
  7. OSG仿真案例(10)——osg仿真录屏抓取图像,自定义修改路径,程序控制(而不是按键控制)...
  8. 基于vue+Java实现的餐厅订餐点餐管理系统
  9. A40I构建编译应用程序的SDK环境
  10. Lua 随机生成字符串
  11. 使用IText组件在PDF文档上绘制椭圆形印章的算法分析及代码分享
  12. 智慧屏新品尝鲜:精致机身旗舰声画
  13. WINDOWS文件夹下的应用程序
  14. 全球认可的PMI认证体系
  15. 电脑外设(I/O)简介:键盘鼠标
  16. 目标检测FPN(Feature Pyramid Networks)的使用
  17. VS2017出现许可证过期解决方法
  18. python入门学习笔记——详细基础知识篇(第10章 正则表达式(重点)与JSON)
  19. Xcode菜单及常用快捷键大全
  20. 鲁班学院-java架构师线上培训机构哪家好

热门文章

  1. 感冒引起了鼻窦炎?我的头痛是因为这个吗?治疗过程手记!
  2. Power Automate 桌面版的下载和安装
  3. oracle数据库物化视图的作用,Oracle物化视图的用法与总结
  4. 什么是那 10% 不能被 AI 轻易取代的技能?
  5. Attention 机制
  6. 如何在html中加入音效,给网页中的按钮和图片添加声音
  7. 李沐读论文笔记--大模型时代下做科研的四个思路
  8. librosa安装技巧
  9. JZ2440(精致2440)开发板 和电脑直接连接(不经过路由器)
  10. vue3+ts 之echarts 水球图 liquidFill 的使用