2

スレッドを使用してカスタム サーフェス ビュー クラスを作成し、相対レイアウト内のメイン アクティビティにカスタム サーフェス ビューを追加しました。ここで、カスタム サーフェス ビュー クラス コンストラクターでビットマップを宣言します。

public static Bitmap mbitmap;
public Surface(Context ctx, AttributeSet attrSet) {
        super(ctx, attrSet);
        context = ctx;
        mbitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.abc);         
        SurfaceHolder holder = getHolder();
        holder.addCallback(this);
    }

そして私はそれをキャンバスに描いた

public void doDraw(Canvas canvas) {
    canvas.drawBitmap(mbitmap, 0, 0, null);
}

成功した図面を取得します。しかし、それは画面全体を占有します

<RelativeLayout
    android:id="@+id/outer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
 <com.cg.Surface
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
       <RelativeLayout
        android:id="@+id/processing_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </RelativeLayout>
</RelativeLayout>

高さと幅に Wrap_Content を使用しても、画面全体が背面に描画されます。適切なサイズだけでビットマップ画像を描画するには? Custom Surface View Class のこのオーバーライドメソッドでそれは可能ですか:

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height)
{ }

その中でsetMeasuredDimensionを使用し、ビットマップ内のサーフェスビューのサイズを制限する方法がない場合?

4

2 に答える 2

4

長方形を使用し、Matrixを使用してその中に画像を描画できるため、

public void doDraw(Canvas canvas)
{
int width = mbitmap.getWidth();
int height = mbitmap.getHeight();
float h= (float) height;
float w= (float) width;
Matrix mat=new Matrix();
mat.setTranslate( 500, 500 );
mat.setScale(800/w ,800/h);
canvas.drawBitmap(mbitmap, mat, null);
}
于 2013-02-15T12:06:33.457 に答える
3

を使用してそれを達成できます

public void drawBitmap (Bitmap bitmap, Rect src, Rect dst, Paint paint); 

つまり :

canvas.drawBitmap(bitmap, src, dst, paint);

onDraw のメソッド

Rect src = new Rect(0, 0, width, height);
Rect dst = new Rect(x, y, x + width, y + height); 

私は願っています。私は長い間、自分自身のこの解決策に到達するのを待っていたので、これが他の人の助けになるかもしれないと思った.

于 2013-02-05T13:38:51.187 に答える