Android重叠视图
我是Android新手,让我先告诉你我想要实现什么。使用套接字,我每50毫秒从计算机的网络摄像头发送一次图片。在Android应用程序中,我创建了扩展视图的显示器。我已将此视图添加到FrameLayout。并行线程正在从服务器应用程序(桌面)接收图像并刷新我的显示 在这张图片上,我想显示一些加速计数据,这些数据每。。。它被设置为传感器延迟最快。所以我还创建了另一个扩展视图的显示,并将其添加到另一个FrameLayout中。现在我将main.xml设置为与这些框架布局重叠 我从桌面应用程序获取图像,绘制加速度计数据,数据重叠,但问题是。。它在闪烁。有人能帮忙吗?或者提出一些建议。。正如我所指出的,我是Android新手Android重叠视图,android,layout,Android,Layout,我是Android新手,让我先告诉你我想要实现什么。使用套接字,我每50毫秒从计算机的网络摄像头发送一次图片。在Android应用程序中,我创建了扩展视图的显示器。我已将此视图添加到FrameLayout。并行线程正在从服务器应用程序(桌面)接收图像并刷新我的显示 在这张图片上,我想显示一些加速计数据,这些数据每。。。它被设置为传感器延迟最快。所以我还创建了另一个扩展视图的显示,并将其添加到另一个FrameLayout中。现在我将main.xml设置为与这些框架布局重叠 我从桌面应用程序获取图像
谢谢 这是一个绘制图像的简单覆盖。-以及调用重画的方法
@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()方法。这将强制重新绘制。如果您可以在活动中包含一些正在使用的代码,尤其是使用日期更新视图的代码,这将非常有用。