Android 在实时壁纸中绘制位图
我正在尝试制作一个简单的实时壁纸,当用户触摸屏幕时,会在该位置绘制位图。我面临2个问题,如果我在Runnable中绘制它,那么它将持续创建位图,如果我在外部绘制它,那么它将持续闪烁。我已经注意到,如果我改变了runnable闪烁的延迟时间,也会改变,如果我完全移除runnable,那么画得很好,但是位置变得很奇怪 这是我的密码。 这个持续闪烁Android 在实时壁纸中绘制位图,android,live-wallpaper,Android,Live Wallpaper,我正在尝试制作一个简单的实时壁纸,当用户触摸屏幕时,会在该位置绘制位图。我面临2个问题,如果我在Runnable中绘制它,那么它将持续创建位图,如果我在外部绘制它,那么它将持续闪烁。我已经注意到,如果我改变了runnable闪烁的延迟时间,也会改变,如果我完全移除runnable,那么画得很好,但是位置变得很奇怪 这是我的密码。 这个持续闪烁 package com.example.live_wallpaper_p1; import android.app.WallpaperManager;
package com.example.live_wallpaper_p1;
import android.app.WallpaperManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.os.Bundle;
import android.os.Handler;
import android.service.wallpaper.WallpaperService;
import android.view.SurfaceHolder;
public class DemoWallpaperService extends WallpaperService {
@Override
public Engine onCreateEngine() {
return new DemoWallpaperEngine();
}
private class DemoWallpaperEngine extends Engine{
private boolean mVisible = false;
private final Handler mHandler = new Handler();
private Bitmap imm;
private float xcor;
private float ycor;
BitmapFactory.Options option;
DemoWallpaperEngine()
{
imm = Bitmap.createBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.icon, option));
}
private final Runnable mUpdateDisplay = new Runnable() {
@Override
public void run() {
draw();
}};
@Override
public Bundle onCommand(String action, int x, int y, int z, Bundle extras, boolean resultRequested) {
if (action.equals(WallpaperManager.COMMAND_TAP)) {
xcor=x;
ycor=y;
final SurfaceHolder holder = getSurfaceHolder();
Canvas c = null;
try {
c = holder.lockCanvas();
if (c != null) {
c.drawBitmap(imm, xcor-(imm.getWidth()/2), ycor-(imm.getHeight()/2),null);
//drawCube(c);
}
} finally {
if (c != null)
holder.unlockCanvasAndPost(c);
}
}
return null;
}
private void draw() {
SurfaceHolder holder = getSurfaceHolder();
Canvas c = null;
try {
c = holder.lockCanvas();
if (c != null) {
//do something
}
} finally {
if (c != null)
holder.unlockCanvasAndPost(c);
}
mHandler.removeCallbacks(mUpdateDisplay);
if (mVisible) {
mHandler.postDelayed(mUpdateDisplay, 10);
}
}
@Override
public void onVisibilityChanged(boolean visible) {
mVisible = visible;
if (visible) {
draw();
} else {
mHandler.removeCallbacks(mUpdateDisplay);
}
}
@Override
public void onSurfaceChanged(SurfaceHolder holder, int format, int width, int height) {
draw();
}
@Override
public void onSurfaceDestroyed(SurfaceHolder holder) {
super.onSurfaceDestroyed(holder);
mVisible = false;
mHandler.removeCallbacks(mUpdateDisplay);
}
@Override
public void onDestroy() {
super.onDestroy();
mVisible = false;
mHandler.removeCallbacks(mUpdateDisplay);
}
}
}
您可以试试这个示例代码 此处imageURL是指向图像位置的http链接
Bitmap bitmap = BitmapFactory.decodeStream((InputStream)new URL(imageUrl).getContent());
holder.itemImage.setImageBitmap(bitmap);
如果您的图像在手机存储器中
用这个
image.setImageResource(R.drawable.test2);
真正的效果是在“draw()”或“render()”方法中执行的操作。你需要在这里发布代码。这是完整的代码。它使用draw()方法。对于此用户,将需要Internet。我想要内置位图。位图是Java中的内置类。我不知道你想说什么?你给出的上述代码需要互联网连接才能运行。我希望它应该工作,即使互联网连接不可用。那么你在SD卡中保存图像的位置?在应用程序本身中。就像我们在其他应用程序中保存一样,这也是一样的。