1

カスタムビューを実装していますが、実行時にサイズを変更できるようにしたいと考えています。

問題の単純化:このビューにビットマップを表示する必要がありますが、頻繁に更新されるため、SurfaceViewを拡張したいと思います。

問題は、ImageViewの自動サイズ変更機能が失われることです。

そこで、メソッドsetCustomBitmap(Bitmap bmp)を宣言し、そのビットマップの幅と高さに応じて(アスペクト比を維持しながら)ビューのサイズを変更します(ビューが表示される時点または次回)。

どの方法を使用すればよいですか?setWidth()とsetHeight()は最良のアイデアではないと思います

4

1 に答える 1

2

SurfaceViewを拡張しているので、onMeasure()メソッドをオーバーライドできる可能性があります。(を介して)スーパークラスに渡すMeasureSpecインスタンスsuper.onMeasure()は、SurfaceViewのサイズを決定します。ビットマップのディメンションを使用して、各MeasureSpecを作成できます。

例えば:

protected void onMeasure( int widthMeasureSpec, int heightMeasureSpec ) {
    int parentViewWidth = MeasureSpec.getSize( widthMeasureSpec );
    int parentViewHeight = MeasureSpec.getSize( heightMeasureSpec );
    // ... take into account the parent's size as needed ...
    super.onMeasure(
        MeasureSpec.makeMeasureSpec( bitmap.width(), MeasureSpec.EXACTLY ), 
        MeasureSpec.makeMeasureSpec( bitmap.height(), MeasureSpec.EXACTLY ) );
}
于 2012-10-02T23:21:33.510 に答える