gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 00:47:02 25 4
gpt4 key购买 nike

这可能不是最佳实践,但它似乎是最简单的。我需要将位图传递给 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);
}

然后我尝试分配它,但我不知道如何设置 View 和传递位图

setContentView(R.layout.sample); //has my custom view
mSampleView = (SampleView) findViewById(R.id.sampleView);

这可能是我不理解初始化 View 的方式。我看过使用“addview()”的示例。这样做的基本目标是在表面 View 中显示位图。根据我的谷歌搜索,您无法访问 onDraw 以外的 Canvas ,因此我需要在其初始化时将其传入(我认为)。我也不确定当我设置 var "mSampleView"或当我使用 setContentView() 调用布局时调用构造函数。如果是后者,那么所有这些静音都会让我想知道是否有办法访问 Canvas 或定位主要 Activity 。如果我可以定位主要 Activity ,我可以在需要时在那里访问它,但我对 android/java 中的范围没有很好的把握。

以这种方式传递数据是一种不好的做法吗?是否有比全局数据存储更标准的方式来传递数据。

最佳答案

进一步澄清我的评论...当继承类在构造函数调用中不支持该对象时,您不能将另一个对象直接传递给类的构造函数。

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

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

这是您可以做的事情的示例。

先构造 View ,给 View 一个位图

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,然后使 View 无效时,onDraw 方法将使用新对象,因为 myReferencedBitmap 持有对(对象)值的引用。

另一个要看的是 Java 中的 byref 与 byval。

祝你好运。

关于android - 通过构造函数将参数传递给 SurfaceView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5834654/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com