【问题标题】:To draw Bitmap - Wrap content to Surface view in Android绘制位图 - 在 Android 中将内容包装到 Surface 视图
【发布时间】:2013-01-20 09:56:55
【问题描述】:

我创建了一个带有线程的自定义表面视图类,并在我的主要活动中添加了自定义表面视图,并在一个相对布局内。现在我在自定义表面视图类构造函数中声明一个位图。

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 作为高度和宽度,我还是在后面绘制了整个屏幕。如何单独绘制适当大小的位图图像?自定义表面视图类中的这种覆盖方法是否可能:

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

如果没有如何在其中使用 setMeasuredDimension 并限制位图中的表面视图大小?

【问题讨论】:

    标签: android bitmap surfaceview


    【解决方案1】:

    我们可以用一个矩形,用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);
    }
    

    【讨论】:

      【解决方案2】:

      我们可以使用

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

      希望能做到。我认为这可能对其他人有所帮助,因为很长时间以来我一直在等待自己达到这个解决方案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-30
        • 2014-12-08
        • 2012-07-26
        • 1970-01-01
        相关资源
        最近更新 更多