ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

android-动态壁纸渐变条纹:是否可以使用ARGB_8888或抖动来解决?

2019-11-02 23:26:20  阅读:171  来源: 互联网

标签:live-wallpaper gradient android


我正在创建动态壁纸,并且在每个画布上绘画
颜色不断变化的Runnable.run()调用,我希望放置一个
渐变超过顶部,但我正在创建的渐变带
太可怕了搜寻了几天后,我想出了两种解决方案:
将抖动设置为true
将画布位图设置为ARGB_8888

我试过了第一个(将dither设置为true)
getWallpaper()访问器和Paint对象,但没有帮助(我看不到
任何抖动都没有),所以我尝试过更改画布位图,但是我
不确定如何实际显示

// _canvasBmp = Bitmap.createBitmap(metrics.widthPixels, metrics.heightPixels, Bitmap.Config.ARGB_8888);

_shadowPaint.setStyle(Paint.Style.FILL);
_shadowPaint.setShader(new RadialGradient(metrics.widthPixels / 2,
metrics.heightPixels / 2, metrics.heightPixels / 2, 0x00000000,0x33000000, Shader.TileMode.CLAMP));
_shadowPaint.setDither(true); // this hasn't seemed to have done anything to fix the banding

// my main rendering method is this (based on the Google live wallpaper example)
void drawFrame()
{
   final SurfaceHolder holder = getSurfaceHolder();

   Canvas c = null;
   try
   {
           c = holder.lockCanvas();
           // c.setBitmap(_canvasBmp);// this was my attempt to update the bitmap to one that was ARGB_8888 but it didn't render at all

           if (c != null)
           {
                   // draw something
                   drawBackground(c);
                   drawTouchPoint(c);
                   drawShading(c);
                   drawBorder(c);

                   getWallpaper().setDither(true); // yet another attempt to get some kind of dithering going to no avail
           }
   }
   finally
   {
           if (c != null)
                   holder.unlockCanvasAndPost(c);
   }

   _handler.removeCallbacks(_drawClock); // _drawClock is the Runnable object

   if (_isVisible)
   {
           _handler.postDelayed(_drawClock, 1000 / 25);
   }
}


private void drawShading(Canvas c)
{
    c.drawRect(_screenBounds, _shadowPaint); // _screenBounds is a Rect set to the _metrics width and height
}

在此先感谢您的时间

解决方法:

在您的PinupEngine类中…

@Override
public void onCreate(SurfaceHolder surfaceHolder) {
  super.onCreate(surfaceHolder);
  surfaceHolder.setFormat(android.graphics.PixelFormat.RGBA_8888);
}

我发现LiveWallpaper绘图在位图像素类型较大时较慢.我希望它也会使用更多的内存(比Double多).如果可以的话,尝试限制RGBA_8888的使用可能是值得的.我认为默认值为RGB_565,对此不确定.

标签:live-wallpaper,gradient,android
来源: https://codeday.me/bug/20191102/1995023.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有