【发布时间】:2011-04-29 16:24:44
【问题描述】:
这可能不是最好的做法,但它似乎是最简单的。我需要将位图传递给 SurfaceView 以便调用它准备好 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()”的例子。其基本目标是在表面视图中显示位图。根据我的谷歌搜索,您无法访问除 onDraw 之外的画布,因此我需要在其初始化时将其传递(我认为)。我也不确定在设置 var "mSampleView" 或使用 setContentView() 调用布局时是否调用了构造函数。如果是后者,那么这一切都让我想知道是否有办法访问画布或定位主要活动。如果我可以针对主要活动,我可以在需要时访问它,但我对 android/java 的范围没有很好的掌握。
以这种方式传递数据是一种不好的做法吗?除了全局数据存储之外,还有更标准的数据传递方式吗?
【问题讨论】:
-
据我所知,你不能那样做。继承的类不支持。
标签: android