android - 当应用程序在运行模式下启动时,Canvas 对象为空,而在调试模式下运行时对象具有值
问题描述
我使用画布对象设置 drawbitmap 以设置壁纸更改它基于 > 用户选择的时间间隔。当应用程序在运行模式下启动并且在调试模式下它不为空时,Canvas 对象为空。下面是我的代码非常奇怪的行为
public MyWallpaperEngine() {
mImagesArray = new int[] {R.drawable.one,R.drawable.two,R.drawable.three,
R.drawable.four,R.drawable.five,R.drawable.six,
R.drawable.seven,R.drawable.eight,R.drawable.nine,
R.drawable.ten};
myTimertask = new TimerTask() {
@Override
public void run() {
System.out.println("TIMER SCHEDULED INSIDE RUN");
drawFrame();
incrementCounter();
}
};
myTimer.schedule(myTimertask,startInterval,WALLPAPER_DURATION);
}
private void incrementCounter() {
mImagesArrayIndex++;
if (mImagesArrayIndex >= mImagesArray.length) {
mImagesArrayIndex = 0;
}
}
private void drawFrame() {
System.out.println("inside draw frame");
SurfaceHolder holder = getSurfaceHolder();
System.out.println("holder Object "+holder);
Canvas canvas = null;
try {
canvas = holder.lockCanvas();
System.out.println("Canvas Object "+canvas);
if (canvas != null) {
System.out.println("inside draw image");
drawImage(canvas);
}
} finally {
if (canvas != null) {
holder.unlockCanvasAndPost(canvas);
}
}
}
private void drawImage(Canvas canvas)
{
Bitmap image = BitmapFactory.decodeResource(getResources(),
mImagesArray[mImagesArrayIndex]);
Bitmap b=Bitmap.createScaledBitmap(image, canvas.getWidth(), canvas.getHeight(), true);
canvas.drawBitmap(b, 0,0, null);
}
解决方案
什么时候调用你的 drawImage 方法?(来自活动/片段生命周期)。
您无法在运行时接收的原因可能是因为您的视图尚未完全绘制在放置画布对象的屏幕上。
您的画布在调试模式下不为空,因为调试模式较慢并且它有足够的时间来绘制。
确保遵循活动/片段生命周期。
推荐阅读
- excel - 用于在 Excel 中更改边框线颜色的 VBA
- c++ - C++ 中基类和派生类对象的树结构
- python - 在上一段的空格后输入文本数据
- prometheus - 为非原因的微服务静音警报
- javascript - 如何在Javascript中获取全局对象的名称和道具
- firebase - 托管中自定义域上的 Firebase 动态链接重写但如何
- javascript - 如何在单击超链接时以弹出模式打开另一个页面
- nuget - Nuget 包管理器已损坏 - '' 不是 VS2019“管理解决方案包”中的有效版本字符串
- vba - 在 Access 中使用通配符访问部分文件名
- elasticsearch - 这个 Elasticsearch OR Query 有什么不正确的地方?