更新设置后,如何重新启动壁纸引擎?
我正在创建一个实时壁纸,并且我正在使用本教程作为起点: http://code.tutsplus.com/tutorials/create-a-live-wallpaper-on-android-using-an-an-animated-gif-cms-23088 我正在尝试添加设置菜单,以便用户选择四个背景之一.我拥有使用SharedPreferences的所有工作.唯一的问题是,在设置菜单中更改设置后,壁纸不会更新.如果重新启动该应用程序,则将使用选定的最后一个背景更新背景,但是仅在重新启动墙纸之后起作用(即选择其他墙纸,然后重新选择此壁纸). 我将问题缩小到了以下事实:SharedPreference的值仅在onCreateEngine()方法中更新.一旦壁纸服务运行,onCreateEngine()方法就不会被调用,因此,即使更改了SharedPreference的值,也不会在壁纸服务中更新. 我的问题是如何重新启动墙纸,以便在设置更改后onCreateE
实时壁纸得到强制关闭的问题
我正在创建Live Wallpaper应用程序,该应用程序在XHDPI和LDPI设备上完美运行,但在基于HDPI和MDPI的手机中获得了强制性问题. 当我们单击"设置墙纸"时,它也会在预览屏幕中加载图像,即使我们从应用程序更改设置. 以上两个条件使应用程序强迫关闭. 看起来像 OutofmemoryError 错误不一致 这是我的代码: pixeltwo.java public class pix11two extends SurfaceView { private pix11three three; int fps; Bitmap mBitmap; int country_flag; public pix11two(Context context, int fps, int country) { super(context); this.fps = fps; country_flag = country;
0 2024-03-31
编程技术问答社区
在实时墙纸中设置背景位图
我刚刚开始写一张活墙纸. 我想做的是将背景设置为我的资源的位图.我将在此基础上绘制动画. 这样做的最有效方法是什么?有没有办法将背景设置为实时墙纸中的位图?在绘制动画之前,我是否只需要每次将位图绘制到画布中(似乎这可能是效率低下的效率)? 谢谢, 杰伊 解决方案 这就是我发现的. 来自Eclipse图形文档: 注意:在每次通行证上,您从表面持有人中检索画布,将保留画布的先前状态.为了使图形适当动画,您必须重新绘制整个表面.例如,您可以通过用drawcolor()填充颜色或用drawbitmap()设置背景图像来清除画布的先前状态.否则,您将看到先前执行的图纸的痕迹 所以我使用的代码如下: 在ongreate()中 mbitmapbase = bitmapfactory.decoderesource(getResources(),r.drawable.bidbackground); 在onsurfacechanged()中 //
0 2024-03-31
编程技术问答社区
如何使用摄像机的实时画面作为活动背景?
我正在尝试制作一个应用,其中我需要将相机实时馈送用作背景. (我知道这是一件愚蠢的事情,但无济于事,这是客户的需求). 我尝试使用SurfaceView进行此操作,但到目前为止尚无成功. 到目前为止,我在堆栈溢出上发现的任何内容都更像是一个猜测或方向,但是没有实时示例或代码帮助.如果有人在与像我这样的堆栈溢出用户共享代码之前已经这样做的人会很棒. 解决方案 在这里看看: camera.html 您需要制作显示相机预览的活动所需的所有代码. 其他解决方案 package com.example.CameraPreview; import android.content.Context; import android.content.pm.PackageManager; import android.hardware.Camera; import android.util.AttributeSet; import android.util.Log;
2 2024-03-27
编程技术问答社区
实时墙纸中的视频视图?
根据其他问题 android-video-video-video-video-as-a live-wallpaper ,是在实时墙纸中播放视频的唯一方法是自己解码吗? 解决方案 只需使用MediaPlayer而不是视频播放器即可使用MediaPlayer.setSurface而不是MediaPlayer.setDisplay.如果您使用setDisplay,MediaPlayer Trys告诉表面持有人将屏幕保留在LiveWallPapers不允许的屏幕上,并且会丢下错误. 我使用WebM/vpx8视频,但这应该与任何媒体播放器支持(只需将视频文件放入RES/RAW中) package com.justinbuser.nativecore; import android.media.MediaPlayer; import android.service.wallpaper.WallpaperService; import android.view.SurfaceHo
0 2024-02-19
编程技术问答社区
从活动中启动实时墙纸服务
public class ShortCurActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final Button button = (Button)findViewById(R.id.b_start); if(button != null){ button.setOnClickListener(new View.OnClickListener() { public void onClick(View paramView) { Intent i = new Intent(ShortCurActivity.this, ServiceWallp
0 2024-02-18
编程技术问答社区
防止实时墙纸改变屏幕方向
我正在制作实时壁纸,我想将其始终保持肖像模式.我知道一项活动有可能在清单中声明方向,但是我找不到在实时壁纸服务中做同样的方法.是否有可能以某种方式告诉墙纸引擎在渲染过程中交换X和Y轴,或者类似的东西,因为我不知道. 解决方案 使用以下方法检查方向更改 public void onSurfaceChanged(SurfaceHolder holder, int format, int width, int height) 如果宽度大于高度,您知道方向变为景观. 确保您现在将X视为y,将其视为x. 宽度和高度也是如此. 其他解决方案 您可以处理实时壁纸的方向更改.您无法修复方向.
16 2024-02-18
编程技术问答社区
错误1 libavcodec.so 文件格式不被识别 安卓GL实时壁纸
我正在尝试为Android的Android制作一个实时墙纸,该壁纸位于Android-Asset设备上的.MP4视频(在我使用的示例中,它实际上将文件复制到运行时/无关紧要的SDCARD ) 我找到了这个示例 并使用此 post 我能够获得我的eclipse set与NDK一起建立项目. 使用NDK插件在Eclipse中构建时,我会在问题窗口中获得此错误: Description Resource Path Location Type make: *** [libs/armeabi/libavcodec.so] Error 1 GLWallpaperVideoDemo-master C/C++ Problem make: *** Deleting file `libs/armeabi/libavcodec.so' GLWallpaperVideoDemo-master C/C++ Problem 如果我尝试
22 2024-02-17
编程技术问答社区
如何在实时墙纸中通过中心裁剪和适合宽度/高度的方式来适应视频?
背景 我正在制作一个可以显示视频的实时墙纸.一开始我认为这将非常困难,因此有些人建议使用OpenGL解决方案或其他非常复杂的解决方案(例如无论如何,为此,我发现了各个地方谈论它,并基于此 github库 (有一些错误),我终于让它起作用. 问题 当我成功地显示视频时,我找不到与屏幕分辨率相比的方法. 目前,它总是可以扩展到屏幕尺寸,这意味着该(视频取自 在这里 ): 可以显示: 原因是不同的纵横比:560x320(视频分辨率)vs 1080x1920(设备分辨率). 注意:我很清楚在各种github存储库中可用的缩放视频解决方案(例如 在这里 ),但是我在问一个现场墙纸.因此,它没有视图,因此对如何做事更具限制.更具体地说,解决方案不能具有任何形式的布局,纹理视图或表面视图或任何其他类型的视图. 我尝试过的 我试图使用表面持有人的各种领域和功能,但到目前为止没有运气.示例: 更改 rel="noreferrer"> - 相同.
2 2024-02-17
编程技术问答社区
如果表面不在前台,SurfaceHolder.lockCanvas返回null。
我目前正在使用Android的LiveWallpaper进行测试.我正在使用看起来像这样的代码在画布上绘制一些内容: final SurfaceHolder holder = getSurfaceHolder(); Canvas c = new Canvas(); c = holder.lockCanvas(); // c becomes null c.save(); c.drawBitmap(currentBitmap); c.restore(); holder.unlockCanvasAndPost(c); 这部分在正常情况下工作正常.但是,我有一个听众可以在与此服务相对应的设置中更改设置时执行此代码.似乎每当我从设置活动中执行此代码时,我都会在c.save()方法上获得NullPointer. 似乎只有当壁纸不在前景中时,holder.lockcanvas().当它不在前景时不可能绘制到该表面吗? 解决方案 是的.避免这种情况的一种常见方法是在Onpause
6 2024-02-13
编程技术问答社区
实时墙纸和扩展背景
我试图创建一个动画,总是以当前的HomeScreen页面为中心,而不会丢失延长的背景. 我现在正在做的是绘制我的自定义背景位图,然后在上面绘制一些文本. 这是我的绘图方法: final SurfaceHolder holder = getSurfaceHolder(); Canvas canvas = null; try { canvas = holder.lockCanvas(); if (canvas != null) { if(mBackgroundBitmap != null) { canvas.drawBitmap(mBackgroundBitmap, 0, 0, null); } else { canvas.drawColor
4 2024-02-13
编程技术问答社区
使用canvas的3D立方体。需要一点改进
我使用以下代码制作了此3D立方体 Matrix mMatrix = canvas.getMatrix(); canvas.save(); camera.save(); camera.rotateY(-angle); camera.getMatrix(mMatrix); mMatrix.preTranslate(-width, 0); mMatrix.postTranslate(width, 0); canvas.concat(mMatrix); canvas.drawBitmap(bmp1, 0, 0, null); camera.restore(); canvas.restore(); camera.rotateY(90 - angle); camera.getMatrix(mMatrix); mMatrix.preTranslate(-width, 0); mMatrix.postTranslate(width2, 0); canvas.concat(mMatrix); c
6 2024-02-13
编程技术问答社区
安卓实时壁纸视差滚动效果
当我们滚动时,主屏幕的前景(图标,小部件等)通过全屏宽度向左或向右移动,但是背景图像(或实时墙纸)仅移动该宽度的一小部分. 我的问题是如何获得这种效果. 到现在为止. SurfaceHolder holder = getSurfaceHolder(); Canvas canvas = null; try { canvas = holder.lockCanvas(); if (canvas != null) { drawCircles(canvas); } } finally { if (canvas != null) holder.unlockCanvasAndPost(canvas); } 绘制功能是 { private void
8 2024-02-13
编程技术问答社区
在图像上创建阿尔法梯度以创造淡化效果
如何在图像上应用α梯度,以使其线性褪色? 目前,我正在创建单位宽度的矩形,并使用它用绘制对象绘制位图,其中alpha值在循环中更改.我只做到了,因为我什么也没想到.因此,更整洁的方式会更好. Bitmap bitmap = BitmapFactory.decodeStream(is); Bitmap bmp = Bitmap.createScaledBitmap(bitmap, 100, 151, true)); bitmap.recycle(); Rect Rect1 = new Rect(0, 0, 100, 100); Rect Rect2 = new Rect(100, 0, 101, 100); Paint paint = new Paint(); canvas.drawBitmap(bmp, Rect1, Rect1, null); while (paint.getAlpha() != 0) { paint.setAlpha(paint.getAlpha(
16 2024-02-13
编程技术问答社区
onOffsetsChanged: 移动位图
我想要具有屏幕高度的位图,并且如果用户更改桌面,则与屏幕相比,屏幕的宽度大于屏幕,以便向右移动一点,以便他可以看到整个图像. 这是我的代码,它只是部分工作: int x = -1*(int)((xOffset*bmp.getWidth())); canvas.drawBitmap(bmp, x, 0, null); 谢谢! 解决方案 您通过变量xpixels和yoffsetschanged()中的ypixels获得精确的像素值.请参阅我的答案: android live live live live live live wallpaper recalpaper recalpage reclaper 例如,在OnoffSetsChanged()中,您可以设置一个私有类变量 mPixels = xPixels; 然后,在您的抽奖例程中 holder = getSurfaceHolder(); c = holder.lo
2 2024-02-13
编程技术问答社区
安卓实时壁纸-OpenGL vs Canvas
我是一个相当" newb"的Android开发人员,我希望我的第一个项目之一是实时墙纸,但是我矛盾的是我是否应该专注于帆布或OpenGL.我知道我应该首先掌握帆布,因为它更容易使用,但是我更喜欢从我感兴趣的现实世界项目中学习,即使有时会有些倒退. 我以前以非常基本的方式使用了这两种方法,我了解它们的一般概念,但是我不确定它们如何转移到现场壁纸领域.我认为在实时壁纸上不需要OpenGL的全部爆炸速度,因为以最大fps运行它只会降低电池的速度超过了必要,但与此同时,我担心使用帆布会导致滞后和滞后在做更改家庭屏幕之类的事情时. 我一直在倾向于使用OpenGL ES 2.0,既要保持最佳性能,又是因为我对墙纸的最初想法涉及很多我不确定Canvas能够的分层,但是我希望一个经验丰富的开发人员关于使用OpenGL所涉及的所有额外工作的意见(尤其是与我所读的现场壁纸有关)是值得的. 解决方案 如果您只需绘制画布即可逃脱(例如,在SDK中的Cube示例),那么工作要少得多.由于动画的
10 2024-02-13
编程技术问答社区
Android-cam.setPreviewDisplay( holder) 遇到IOError
我试图将相机的图像用作实时壁纸的一部分. 在我声明的引擎中,我有此代码: public class Class extends WallpaperService { Camera cam; @Override public void onCreate() { super.onCreate(); cam = Camera.open(); } //... @Override public Engine onCreateEngine() { return new CubeEngine(cam); } class CubeEngine extends Engine { Camera cam; CubeEngine(Camera cam) { this.cam=c
2 2024-02-13
编程技术问答社区
如何处理或防止致命错误 "致命信号11(SIGSEGV)"
perhapse我很幸运,对不同信号的致命错误.今天,这就是以下内容: 02-05 20:57:21.827: D/MY_TEST_MESSAGE(4349): Engine.onVisibilityChanged() 02-05 20:57:21.827: D/MY_TEST_MESSAGE(4349): DrawTask #3 is created! 02-05 20:57:21.827: D/MY_TEST_MESSAGE(4349): DrawTas #3 is working! 02-05 20:57:21.837: I/brcm-gr(4349): [gralloc_lock]: new usage 0x903 02-05 20:57:21.837: I/brcm-gr(4349): [gralloc_lock]: new usage 0x930 02-05 20:57:21.877: I/brcm-gr(4349): [gralloc_lock]: new usage
10 2024-02-13
编程技术问答社区