Java 在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; 我们可以在安卓系统中实现这种类型的活动吗?如果可以,那么如何实现 在您的评论中,您请求了一些示例代码。

我想知道我们是否可以基于某个标志有条件地调用Android的Ondraw()方法。例如,仅当解码特定帧时才应调用
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()?这将真正帮助我更好地理解!