android remoteview 缓存,关于RemoteView的一点愚见(实现桌面小部件)
RemoteView中的应用除了有通知栏的自定义之外,还有桌面小部件也是通过RemoteView以及AppWidgetProvider来完成的。
实际上AppWidgetProvider是一个广播,即继承于BroadcastReceiver。
public class AppWidgetProvider extends BroadcastReceiver
那么我们其实可以将AppWidgetProvider当成一个特殊的BroadcastReceiver就可以了。
让我们来自定义一个桌面小部件:
首先现在res/layout/ 下创建一个xml文件,命名为appwidget.xml,这个就代表着小部件的样子是什么:
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/icon1" />
LinearLayout>
接着我们在res/xml下创建appwidget_provider_info.xml:
android:initialLayout="@layout/appwidget"
android:minHeight="84dp"
android:minWidth="84dp"
android:updatePeriodMillis="86400000" >
appwidget-provider>
在上面第一个属性是指小工具使用的初始化布局。第二属性和第三个属性是指最小的宽高,最后一个属性是指更新周期,每隔这么多秒就会被触发。
下面是实现类,要继承于AppWidgetProvider:
public class AppProvider extends AppWidgetProvider{
public static final String TAG = "MyAppProvider";
public static final String CLICK_ACTION = "com.example.remoteview.action.CLICK";
public AppProvider(){
super();
}
//同样是要重写onReceive()
@Override
public void onReceive(final Context context,Intent intent){
super.onReceive(context, intent);
Log.e(TAG, "action = " + intent.getAction());
if(intent.getAction().equals(CLICK_ACTION)){
Toast.makeText(context, "click it", Toast.LENGTH_SHORT).show();
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
//建立Bitmap
Bitmap srcBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.icon1);
//声明AppWidgetManager
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
for(int i = 0;i < 37;i++){
//控件图片旋转360度
float degree = (i * 10)%360;
RemoteViews remoteView = new RemoteViews(context.getPackageName(),R.layout.appwidget);
remoteView.setImageViewBitmap(R.id.imageView1,rotateBitmap(context,srcBitmap,degree));
Intent intentClick = new Intent();
intentClick.setAction(CLICK_ACTION);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intentClick, 0);
remoteView.setOnClickPendingIntent(R.id.imageView1,pendingIntent);
//updateAppWidget将会调用onUpdate
appWidgetManager.updateAppWidget(new ComponentName(context, AppProvider.class),remoteView);
SystemClock.sleep(30);
}
}
}).start();
}
}
@Override
public void onUpdate(Context context,AppWidgetManager appWidgetManager,int[] appWidgetIds){
super.onUpdate(context, appWidgetManager, appWidgetIds);
Log.e(TAG, "onUpdate");
final int counter = appWidgetIds.length;
Log.e(TAG, "COUNTER = " + counter);
for(int i = 0;i < counter; i++){
int appWidgetId = appWidgetIds[i];
onWidgetUpdate(context,appWidgetManager,appWidgetId);
}
}
//更新部件函数
private void onWidgetUpdate(Context context,AppWidgetManager appWidgetManager,int appWidgetId){
RemoteViews remoteViews = new RemoteViews(context.getPackageName(),R.layout.appwidget);
Intent intentClick = new Intent();
intentClick.setAction(CLICK_ACTION);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intentClick, 0);
//桌面小部件将会被点击触发,发送PendingIntent
remoteViews.setOnClickPendingIntent(R.id.imageView1, pendingIntent);
appWidgetManager.updateAppWidget(appWidgetId, remoteViews);
}
//变换Bitmap的矩阵
private Bitmap rotateBitmap(Context context,Bitmap srcBitmap,float degree){
Matrix matrix = new Matrix();
matrix.reset();
matrix.setRotate(degree);
Bitmap tmpBitmap = Bitmap.createBitmap(srcBitmap,0,0,srcBitmap.getWidth(),srcBitmap.getHeight(),matrix,true);
return tmpBitmap;
}
}
对了,别忘记了还有继承于BroadcastReceiver我们还是需要注册,注册有点点不一样。如下:
android:resource="@xml/appwidget_provider_info">
meta-data>
intent-filter>
receiver>
第一个Action用来标识点击行为,第二个Action是声明为AppWidget必须存在的action。
这样就完成了桌面小工具的实现了。
android remoteview 缓存,关于RemoteView的一点愚见(实现桌面小部件)相关推荐
- android 仿苹果 小组件,安卓仿ios14桌面小部件
安卓仿ios14桌面小部件,是一个可以让安卓手机的界面看起来像苹果界面的软件,功能非常强大,它可以提供多种不同主题的壁纸桌面,随心选择,设置后的效果还是非常不错的,很有高级感,操作简单,上手也很快. ...
- Android Widget——实现桌面小部件
前言 在Android手机中,我们经常会看到各种桌面小部件,天气.音乐播放器.时间表盘等,这些都是桌面小部件的实例.本篇主要介绍桌面小部件开发的一些最基础的知识. Widget介绍 Widget并没有 ...
- 【Android界面实现】AppWidght全面学习之电量监控小部件的实现详解
前几天翻看之前下载的各种资料,无意中发现了一款AppWidght应用的源代码,想起之前一直想研究这块,却一直没机会,于是花费了两天时间,把这款桌面电量监控小插件的实现研究了一下,收获颇丰,特此把学到的 ...
- 手机bootstrap搜索框_这些桌面小部件,Android 手机可不能错过
在开源.可玩性较高的安卓系统上,小部件呈现了与 iOS 不一样的魅力.它高度的灵活自由,使得安卓手机用户,更能对自己的手机桌面进行个性化的定制. 可在细数当下众多的安卓小部件里,哪些能在保持实用性的同 ...
- Android AppWidget(桌面小部件)
使用Android Studio 开发桌面小部件,闲来无事,自己动手做一个 AppWidget是应用程序窗口小部件(Widget)是微型的应用程序视图 官方文档链接:http://www.androi ...
- kwgt 歌词_这8款Android桌面小部件,能让你的Android好用很多倍
安卓手机一直以来以其可玩性高而受到欢迎,即使是简单的桌面小部件,也有人能玩出花来.强大如 Zooper Widget 和 KWGT 等复杂且定制性极强的美化类桌面插件应用,抑或是朴实无华但又必不可少的 ...
- Android桌面小部件AppWidget:音乐播放器桌面控制部件Widget(3)
Android桌面小部件AppWidget:音乐播放器桌面控制部件Widget(3) Android桌面小部件AppWidget比较常用的场景就是音乐播放器,音乐播放器虽然通常在后台播放,但需要 ...
- Android AppWidget(桌面小部件-音乐播放动画)
桌面小部件基础篇:Android AppWidget (桌面小部件) 音乐播放 (动画实现) 一个音乐播放的柱状图(不会上传动图,自行脑补) 思路方案: 1,自定义View,widget 仅支 ...
- android 日期选择图标,android – 如何删除QCalendarWidget中的选定日期矩形和小部件中的小图标...
我正在编写自己的QCalendarWidget实现.我希望日期可以选择,但我不想看默认选择矩形.它看起来像这样: 我的代码: in constructor: setSelectionMode(Sing ...
最新文章
- mysql sql语句编码_SQL语句实用例子 MySQL编码设置
- 第四课.Python函数(一)
- 关于虚拟空间与物理空间思想的解析
- 怎么在表单提交前检查数据输入。
- BMP图片的解析,关于压缩方式
- 形态分类法的迭代次数与成键的稳定性
- mysql qadir_MySQL 及 SQL 注入
- 反模式:神仙大类和黄金大锤
- [贪心专题]CF549G,CF351E,CF226D,CF1276C,CF1148E,CF798D
- Sentinel(二十三)之使用Apollo存储规则
- JavaScript 代码规范
- python爬虫中文乱码_解决Python爬虫处理文件时候中文名称出现乱码问题
- 【Python3网络爬虫开发实战】1.5.2-PyMongo的安装
- 判断是否为长按_【物流知识】物流配送合理化判断7大标志
- 阶段5 3.微服务项目【学成在线】_day04 页面静态化_03-freemarker测试环境搭建
- 如何使用ps制作一寸照
- awr报告分析 mysql_生成awr报告
- 2021-07-12淘宝首页首次尝试
- java SE部分以及数据库学习笔记
- seems to be corrupted. Trying one more time