2012-11-08 30 views
0

我正在创建将从网络播放视频文件的活动。那部分工作正常。在视图上创建视频屏蔽外观

在视频中的某些点,我需要覆盖视频的视图。视图将具有基本的UI元素,主要是按钮和一些文本(不能预先确定)。

我想覆盖看起来好像是视频的一部分,而不一定是原生的UI元素。我遇到的主要问题是,因为视频的质量有点低,所以在UI元素非常尖锐的情况下,它有很多“阻塞”。

任何人都可以建议如何添加“阻塞”的UI元素?

我的想法是,我可以重写父元素的draw(),并以某种方式使用过滤器来创建效果,但我怎么做会超出我的范围。

回答

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); 
}