0

我正在创建一个将播放来自网络的视频文件的活动。那部分运作良好。

在视频中的某些点,我需要在视频上叠加视图。视图将具有基本的 UI 元素,主要是按钮和一些文本(无法预先确定)。

我希望覆盖看起来好像是视频的一部分,而不一定是本机 UI 元素。我遇到的主要问题是,由于视频质量有些低,它有很多“阻塞”,而 UI 元素的绘制非常清晰。

谁能建议如何向 UI 元素添加“阻止”?

我的想法是我可以覆盖draw()父元素并以某种方式使用过滤器来创建效果,但我将如何做到这一点超出了我的范围。

4

1 回答 1

0

最后,我找到了一个适合我的解决方案。它涉及将视图作为位图抓取,将其缩小,然后使用将其拉伸回原始大小。这给出了块状、像素化的外观。我可以通过更改缩放时的大小差异来精确控制块的获取方式。

确保this.setDrawingCacheEnabled(true);在构造函数中设置。

private static final float RESAMPLE_QUALITY = 0.66f; // less than 1, lower = worse quality

public void draw(Canvas canvas) {
    super.draw(canvas);
    Bitmap bitmap_old = this.getDrawingCache();
    Bitmap bitmap_new = Bitmap.createScaledBitmap(bitmap_old, Math.round(bitmap_old.getWidth() * RESAMPLE_QUALITY), Math.round(bitmap_old.getHeight() * RESAMPLE_QUALITY), true);
    Rect from = new Rect(0, 0, bitmap_new.getWidth(), bitmap_new.getHeight());
    RectF to = new RectF(0, 0, bitmap_old.getWidth(), bitmap_old.getHeight());
    canvas.drawBitmap(bitmap_new, from, to, null);
}
于 2012-11-09T15:25:51.257 回答