Android draw阴影下方视图:dispatchDraw经常调用-任何缓存丢失
我试图在视图元素下放置平滑阴影。以下是我到目前为止所做的: 子类FrameLayout(我的阴影视口),它覆盖dispatchDraw(…),并执行以下操作:Android draw阴影下方视图:dispatchDraw经常调用-任何缓存丢失,android,caching,shadow,Android,Caching,Shadow,我试图在视图元素下放置平滑阴影。以下是我到目前为止所做的: 子类FrameLayout(我的阴影视口),它覆盖dispatchDraw(…),并执行以下操作: 调用超类的dispatchDraw并将输出保存为位图 从该位图中提取alpa 模糊 绘制具有一定偏移的模糊提取alpha 绘制原始视图位图 @Override protected void dispatchDraw(Canvas canvas) { Log.d("ShadowViewport", "dispatchDraw");
- 调用超类的dispatchDraw并将输出保存为位图
- 从该位图中提取alpa
- 模糊
- 绘制具有一定偏移的模糊提取alpha
- 绘制原始视图位图
@Override protected void dispatchDraw(Canvas canvas) { Log.d("ShadowViewport", "dispatchDraw"); final Bitmap output = Bitmap.createBitmap(getWidth(), getHeight(), Config.ARGB_8888); final Canvas sCanvas = new Canvas(output); // Draw internal view in canvas super.dispatchDraw(sCanvas); final Bitmap original = output.copy(Config.ARGB_8888, true); Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); paint.setColor(0x55000000); paint.setMaskFilter(new BlurMaskFilter(SHADOW_SIZE, Blur.NORMAL)); canvas.drawBitmap(output.extractAlpha(), 0, SHADOW_SIZE, paint); canvas.drawBitmap(original, 0, 0, null); }
on dispatchDraw函数经常被调用,例如在滚动时。有没有缓存的方法?在AndroidManifest中启用android:hardwareAccelerated=“true”属性将启用图像的自动缓存。例如,在滚动期间不调用dispatchDraw方法
我也认为可以在你的布局课上使用。要实现这一点,应该首先调用getDrawingCache,如果返回的位图不为null,则调用返回的位图。这似乎有点像“穷人”的优化,但可能是提高旧手机性能的好主意。启用AndroidManifest中的android:hardwareAccelerated=“true”属性将启用图像的自动缓存。例如,在滚动期间不调用dispatchDraw方法
我也认为可以在你的布局课上使用。要实现这一点,应该首先调用getDrawingCache,如果返回的位图不为null,则调用返回的位图。这似乎有点像“穷人”的优化,但可能是提高旧手机性能的一个好主意。你在这方面运气好吗?还没有。现在,我使用的是一个简单的9片可拉伸,适合非常简单的形状。“真实”的阴影甚至可以覆盖复杂的视图…请将您的源代码粘贴到这里。@Algo:9-patch可绘制的代码?它只是一个可绘制的集合,作为(在示例中)一个相对物的背景:
android:background=“@drawable/item\u single\u background”
。找到图像。你运气好吗?还没有。现在,我使用的是一个简单的9片可拉伸,适合非常简单的形状。“真实”的阴影甚至可以覆盖复杂的视图…请将您的源代码粘贴到这里。@Algo:9-patch可绘制的代码?它只是一个可绘制的集合,作为(在示例中)一个相对物的背景:android:background=“@drawable/item\u single\u background”
。找到图像。