这可能不是最佳实践,但它似乎是最简单的。我需要传递一个位图到一个SurfaceView,所以它调用onDraw。但我似乎无法弄清楚它的分配时的语法。请注意构造函数中的额外位图。通过构造函数将参数传递给SurfaceView
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,所以我需要通过它时,它的init(我认为)。当我设置var“mSampleView”或使用setContentView()调用布局时,我也不确定构造函数是否被调用。如果后者都是静音,并让我想知道是否有方法访问画布或定位主要活动。如果我可以定位主要活动,我可以在需要时访问它,但是我没有很好地理解android/java中的范围。
以这种方式传递数据是不好的做法吗?除了全局数据存储之外,还会有更通用的passdata方式。
据我所知,你不能这样做。它不受继承类的支持。 – user432209 2011-04-29 16:56:03