Android 通过构造函数将参数传递给SurfaceView

Android 通过构造函数将参数传递给SurfaceView,android,Android,这可能不是最好的做法,但它似乎是最简单的。我需要将位图传递给SurfaceView,以便调用ready with onDraw。但我似乎无法理解它的语法。注意构造函数中的额外位图 public class SampleView extends SurfaceView implements SurfaceHolder.Callback { SurfaceHolder holder; Bitmap mBitmap = null; public SampleView (Context contex

这可能不是最好的做法,但它似乎是最简单的。我需要将位图传递给SurfaceView,以便调用ready with onDraw。但我似乎无法理解它的语法。注意构造函数中的额外位图

public class SampleView extends SurfaceView implements SurfaceHolder.Callback {

SurfaceHolder holder;
Bitmap mBitmap = null;

public SampleView (Context context, AttributeSet attrs, Bitmap bitmap) {
    super(context, attrs);
    if(bitmap != null)
        mBitmap = bitmap

    SurfaceHolder holder = getHolder();
    holder.addCallback(this);
    holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
protected void onDraw(Canvas canvas) {
    Paint paint = new Paint();
    paint.setFilterBitmap(true);
    double aspectRatio = ((double) mBitmap.getWidth()) / mBitmap.getHeight();
    Rect dest = new Rect(0, 0, this.getWidth(),(int) (this.getHeight() / aspectRatio));
    canvas.drawBitmap(mBitmap, null, dest, paint);
}
然后我尝试分配它,但我不知道如何设置视图和传递位图

setContentView(R.layout.sample); //has my custom view
mSampleView = (SampleView) findViewById(R.id.sampleView);
这可能是因为我不理解你创建视图的方式。我见过使用“addview()”的示例。其基本目标是在surfaceview中显示位图。基于我的谷歌搜索,除了onDraw,你不能访问画布,所以我需要在它初始化时传递它(我想)。我也不确定在设置变量“mSampleView”或使用setContentView()调用布局时是否调用了构造函数。如果是后者,所有这些都会静音,让我想知道是否有办法访问画布或以主要活动为目标。如果我可以针对主要活动,我可以在需要时访问它,但我对android/java中的作用域没有很好的掌握


这样传递数据是一种不好的做法吗?除了全局数据存储之外,还有更标准的方法来传递数据。

为了进一步澄清我的评论……如果类的继承类在构造函数调用中不支持该对象,则不能将另一个对象直接传递给该类的构造函数

之后,您必须在另一个方法调用中通过值或通过向对象传递引用来传递位图

您会对onDraw方法处理其使用的对象的方式感到非常困惑。我知道,因为我第一次也很难理解它

下面是一个你可以做的事情的例子

首先构造视图并为视图提供位图

private Bitmap myReferencedBitmap;

public SampleView (Context context, AttributeSet attrs) {
     super(context, attrs);
} 
现在传入要使用的位图对象

public fooBitmap(Bitmap b) {
     myReferencedBitmap = b;
}
现在将onDraw与引用的位图一起使用

protected void onDraw(Canvas canvas) {  
   canvas.drawBitmap(myReferencedBitmap, null, null, paint);
}
现在,每当您修改传递到
SampleView
类中的对象
b
,然后使该视图无效时,
onDraw
方法将使用新对象,因为
myReferencedBitmap
包含对(对象)值的引用

另一个要看的是Java中的byref和byval


祝你好运。

据我所知,你不能那样做。继承的类不支持它。谢谢,我读了更多的内容,无论如何我都应该使用ImageView。但无论如何,我都需要这个相机预览。谢谢你的帮助。