Java 在Android中有条件地使用OnDraw()函数
我想知道我们是否可以基于某个标志有条件地调用Android的Ondraw()方法。例如,仅当解码特定帧时才应调用Java 在Android中有条件地使用OnDraw()函数,java,android,Java,Android,我想知道我们是否可以基于某个标志有条件地调用Android的Ondraw()方法。例如,仅当解码特定帧时才应调用ondraw() 考虑这种情况: decoder(); /// @NDK set flag; if (Flag==set) { OnDraw() works and displays an image } else OnDraw sleeps; 我们可以在安卓系统中实现这种类型的活动吗?如果可以,那么如何实现 在您的评论中,您请求了一些示例代码。
ondraw()
考虑这种情况:
decoder(); /// @NDK
set flag;
if (Flag==set)
{
OnDraw() works and displays an image
}
else
OnDraw sleeps;
我们可以在安卓系统中实现这种类型的活动吗?如果可以,那么如何实现 在您的评论中,您请求了一些示例代码。 我想您的布局中有一个显示解码帧的自定义视图。原则上可以是这样的:
class FrameView extends View {
private Bitmap mBitmap;
public FrameView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onDraw(Canvas canvas) {
//Your drawing logic
canvas.drawBitmap(mBitmap,0,0, null);
}
private void setFrame(final Bitmap b){
if (mBitmap!=null){
mBitmap.recycle();
}
mBitmap = b;
//trigger onDraw, if this method is not called from a ui thread switch to postInvalidate()
this.invalidate();
}
}
通过在活动中调用findViewById()可以获取此视图的句柄。然后在解码线程中调用视图上的setFrame。如果从UI线程外部调用setFrame,请注意使用postInvalidate()。您要查找的是View.invalidate()。onDraw只有在事先发出无效声明的情况下才会被调用。谢谢。在我的例子中,ondraw()的暂停时间仅为几毫秒,仅在解码帧的持续时间内(对于不同的ET帧也会有所不同)我是否仍然使用View.invalidate()?我认为您应该测试一下。在onDraw中直接失效的自定义视图中,我始终得到50-60帧。但是如果它不适用于您的约束,那么您需要切换到更复杂的东西,例如带有专用渲染线程的SurfaceView。@Renard这很有意义。请您发布一个小的伪代码或示例代码来演示如何使用view.invalidate()?这将真正帮助我更好地理解!