0

Web からビデオ ファイルを再生するアクティビティを作成しています。その部分はうまく機能しています。

ビデオの特定のポイントで、ビューをビデオに重ねる必要があります。ビューには基本的な 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 に答える