Android重叠视图

时间:2010-08-16 22:26:11

标签: android layout

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

在这张图片上,我想显示一些刷新的加速度计数据......好吧它设置为SENSOR_DELAY_FASTEST。所以我还创建了另一个扩展View的显示,我也将它添加到另一个FrameLayout。现在我将main.xml设置为与FrameLayouts重叠..

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

谢谢..

1 个答案:

答案 0 :(得分:0)

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

@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是我的变量,它是我的自定义视图的类型。此方法DrawVelocity调用invalidate()方法。这迫使重绘。