求完整动态壁纸安卓代码(安卓动态壁纸大全)
admin 发布:2022-12-20 00:37 161
本篇文章给大家谈谈求完整动态壁纸安卓代码,以及安卓动态壁纸大全对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
android中代码是如何实现调用动态壁纸的
调用后动态壁纸其实是显示在Activity的后面,而Activity则是透明显示,这样就可以看到下面的动态壁纸,如果Activity不是透明的则什么也看不到。
代码中有用到两个接口
IWallpaperService mService;
IWallpaperEngine mEngine;
我们可以看到该目录下面有三个aidl接口,分别是
interface IWallpaperConnection {
void attachEngine(IWallpaperEngine engine);
ParcelFileDescriptor setWallpaper(String name);
}
oneway interface IWallpaperService {
void attach(IWallpaperConnection connection,
IBinder windowToken, int windowType, boolean isPreview,
int reqWidth, int reqHeight);
}
oneway interface IWallpaperEngine {
void setDesiredSize(int width, int height);
void setVisibility(boolean visible);
void dispatchPointer(in MotionEvent event);
void dispatchWallpaperCommand(String action, int x, int y, int z, in Bundle extras);
void destroy();
}
定义壁纸管理和壁纸信息变量
private WallpaperManager mWallpaperManager = null;
private WallpaperInfo mWallpaperInfo = null;
private WallpaperConnection mWallpaperConnection = null;
private Intent mWallpaperIntent;
初始化这些变量
mWallpaperManager = WallpaperManager.getInstance(this);
mWallpaperInfo = mWallpaperManager.getWallpaperInfo();//如果返回null则说明当前不是动态壁纸
mWallpaperIntent = new Intent(WallpaperService.SERVICE_INTERFACE);
mWallpaperIntent.setClassName(mWallpaperInfo.getPackageName(), mWallpaperInfo.getServiceName());
绑定动态壁纸服务
bindService(mIntent, this, Context.BIND_AUTO_CREATE);
IWallpaperService mService;//这里有一个adil接口
在连接监听中试着attach
public void onServiceConnected(ComponentName name, IBinder service) {
mService = IWallpaperService.Stub.asInterface(service);
try {
mService.attach(this, view.getWindowToken(),
// WindowManager.LayoutParams.TYPE_APPLICATION_MEDIA_OVERLAY,
WindowManager.LayoutParams.TYPE_APPLICATION_MEDIA,
true, root.getWidth(), root.getHeight());
} catch (RemoteException e) {
Log.w("", "Failed attaching wallpaper; clearing", e);
}
}
如何实现 Android 动态壁纸效果
Intent intent = new Intent(
WallpaperManager.ACTION_CHANGE_LIVE_WALLPAPER);
intent.putExtra(WallpaperManager.EXTRA_LIVE_WALLPAPER_COMPONENT,
new ComponentName(this, MyWallpaperService.class));
startActivity(intent);
}
动态壁纸应用实际上和其他应用是很相似的。下面我们一步一步来学习怎么创建一款动态壁纸应用。最终的实现效果如下:
代码示例
创建一个新的Project,可以选择不要Activity。但是为了让用户直接跳转到壁纸设置页面,我们创建了一个MainActivity。让用户能够对我们提供的壁纸进行设置,我们再创建一个SettingActivity。
在/res/xml文件夹下创建normal_wallpaper.xml,当然名字可以自取。包含如下内容。注意android:settingsActivity的值,是刚才创建的SettingActivity的包名,可能你需要修改。
?xml version="1.0" encoding="utf-8"?
wallpaper xmlns:android=""
android:description="@string/normal_wallpaper_des"
android:settingsActivity="com.yalin.wallpaper.demo.SettingActivity"
android:thumbnail="@drawable/ic_launcher_round" /
这个文件包含了壁纸的描述和图标,同时包含一个设置页面(设置页面是可选的)。
这个文件会在AndroidManifest.xml中用到。
创建一个NormalWallpaperService类,暂时不用实现里面的方法。
public class NormalWallpaperService extends WallpaperService {
@Override
public Engine onCreateEngine() {
return null;
}
}
同时在AndroidManifest.xml中声明它。meta-data中的resource指定上面创建的XML文件。
service
android:name=".normal.NormalWallpaperService"
android:enabled="true"
android:label="@string/wallpaper"
android:permission="android.permission.BIND_WALLPAPER"
intent-filter android:priority="1"
action android:name="android.service.wallpaper.WallpaperService" /
/intent-filter
meta-data
android:name="android.service.wallpaper"
android:resource="@xml/normal_wallpaper" /
/service
我们还必须在AndroidManifest.xml中增加下面的代码:
uses-feature
android:name="android.software.live_wallpaper"
android:required="true"
/uses-feature
到此我们的基本配置已经OK了。
android ㄆ动态壁纸要怎么做出来
参考如下内容:
打个比方说,在我们设置一个动态壁纸时有预览,这时启动了一个预览的engine来绘制与刷新,当我们设置了壁纸以后又启动了一个填充整个桌面的engine在实时的绘制与刷新。所以动态壁纸的重点在engine里,这里等下提及。
现在着手创建一个动态壁纸。
第一步创建我们的WallpaperService类,同样在其中创建engine类,engine是WallpaperService的内部类。其中engine中关键的方法有
引用
复制代码 代码如下:
onCreate(SurfaceHolder surfaceHolder)
有了surfaceholder我们可以获得canvas对象,有了canvas我们就可以绘图
引用
复制代码 代码如下:
onOffsetsChanged(float xOffset, float yOffset, float xOffsetStep,float yOffsetStep, int xPixelOffset, int yPixelOffset)
屏幕滑动的时候触发此方法
xOffset可以用来判断屏幕序号 百分比的形式,举例说如果你手机上有5个分屏,第一屏这里是0.000,第二屏是0.2000 第三屏是0.4000以此类推
xOffsetStep从字面意义就能理解是步进 同样和你的分屏数有关 如果你的分屏数为5 则每次步进xOffsetStep都是0.20000
xPixelOffset就是实际上像素的移动距离,也就是说移动了多少像素,奇怪的是这里左右移动像素点的offset都为负数
引用
复制代码 代码如下:
public void onVisibilityChanged(boolean visible)
当动态壁纸的可见性发生变化时触发此方法,举例说在桌面上时,动态壁纸的visibility为true,当你运行某个程序的时候动态壁纸的visibility变为false,这里很好理解
引用
复制代码 代码如下:
public Bundle onCommand(String action, int x, int y, int z, Bundle extras, boolean resultRequested)
可以监听点击事件,点击时触发此方法,action为 android.wallpaper.tap,x记录了横坐标,y记录了纵坐标,z的作用未知,可能是为3d桌面预留下的? 没有试验过,z一般为0
求完整动态壁纸安卓代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于安卓动态壁纸大全、求完整动态壁纸安卓代码的信息别忘了在本站进行查找喔。
版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;
相关推荐
- 05-06单页网站的代码(完整的网页代码)[20240506更新]
- 05-06个人主页图片代码(个人主页图片代码怎么弄)[20240506更新]
- 05-06提取微信名片代码(微信名片信息提取)[20240506更新]
- 05-06php后台权限管理代码(php管理员权限)[20240506更新]
- 05-06付费观看代码php(付费观看代码)[20240506更新]
- 05-06在线html执行代码(html怎么运行)[20240506更新]
- 05-06源代码管理资源管理器(资源管理器运行代码)[20240506更新]
- 05-06代码源软件库(程序代码库)[20240506更新]
- 05-06点击弹出密码代码(点击弹出密码代码错误)[20240506更新]
- 05-06滚动导航代码(导航页面代码)[20240506更新]
取消回复欢迎 你 发表评论:
- 标签列表
- 最近发表
- 友情链接