Android重叠视图

Android重叠视图,android,layout,Android,Layout,我是Android新手,让我先告诉你我想要实现什么。使用套接字,我每50毫秒从计算机的网络摄像头发送一次图片。在Android应用程序中,我创建了扩展视图的显示器。我已将此视图添加到FrameLayout。并行线程正在从服务器应用程序(桌面)接收图像并刷新我的显示 在这张图片上,我想显示一些加速计数据,这些数据每。。。它被设置为传感器延迟最快。所以我还创建了另一个扩展视图的显示,并将其添加到另一个FrameLayout中。现在我将main.xml设置为与这些框架布局重叠 我从桌面应用程序获取图像

我是Android新手,让我先告诉你我想要实现什么。使用套接字,我每50毫秒从计算机的网络摄像头发送一次图片。在Android应用程序中,我创建了扩展视图的显示器。我已将此视图添加到FrameLayout。并行线程正在从服务器应用程序(桌面)接收图像并刷新我的显示

在这张图片上,我想显示一些加速计数据,这些数据每。。。它被设置为传感器延迟最快。所以我还创建了另一个扩展视图的显示,并将其添加到另一个FrameLayout中。现在我将main.xml设置为与这些框架布局重叠

我从桌面应用程序获取图像,绘制加速度计数据,数据重叠,但问题是。。它在闪烁。有人能帮忙吗?或者提出一些建议。。正如我所指出的,我是Android新手


谢谢

这是一个绘制图像的简单覆盖。-以及调用重画的方法

@Override
protected void onDraw(Canvas canvas){
    Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG);
    paint.setARGB(10, 255, 255, 255);
    if(Core.pic != null) {
        canvas.drawBitmap(Core.pic, 0, 0, paint);
    }       
}
以下是另一个类,当新图像可用时,该类将调用重画:

    protected static volatile Bitmap pic;
    public static void refreshDisplay(Bitmap img){
    pic = img;
    if(cameraDisplay != null) {
        try{
            cameraDisplay.invalidate();
        }
        catch(Exception e){
            e.printStackTrace();
        }
    }
}
这是一个线程类,每50ms准备一次端口:

        while(running){

        opt.inDither = true;
        opt.inPreferredConfig = Bitmap.Config.ARGB_8888;

        if(in != null){
            byte[] recieve = new byte[7000];
            try {
                in.read(recieve, 0, 7000);
                Core.pic = BitmapFactory.decodeByteArray(recieve, 0, 7000, opt);    
            } catch (IOException e) {}
        }
        try {
            sleep(50);
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }
    }
单凭这一点就行。当我重叠此视图时,它会闪烁。以类似的方式读取加速度计数据并绘制:

    public void onAccelerationChanged(float x, float y, float z) {
    if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT){
        velocityBars.DrawVelocity(x, -z);
    }
    else if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE){
        velocityBars.DrawVelocity(y, -z);
    }
}

velocityBars是自定义视图类型的变量。此方法调用invalidate()方法。这将强制重新绘制。

如果您可以在活动中包含一些正在使用的代码,尤其是使用日期更新视图的代码,这将非常有用。