我想在一秒钟内显示大约 30 张照片,所以它们会像视频一样显示。
我在 while(TRUE) 循环中使用了 Android ImageView,但是 ImageView 没有像我预期的那样改变。
ImageView每秒钟换一张图片,不知道有没有别的办法
显示我的照片?
照片是用Udp从相机传过来的,我先要存到一个buffer里
比显示。
上述部分导致 ImageView 延迟。
部分代码是这样的
public void receiveVideoRawData() throws IOException{
socket_video = new DatagramSocket();
byte[] buf_rcv = new byte[153600];
DatagramPacket rawData = new DatagramPacket(buf_rcv, buf_rcv.length);
Bitmap image = null;
socket_video.receive(rawData);//receive a raw data
image = readMyRawData.readUINT_RGBImage(buf_rcv);//decode the raw data
ByteArrayOutputStream blob = new ByteArrayOutputStream();
Bitmap pBitmap = image ;
pBitmap.compress(Bitmap.CompressFormat.JPEG, 1, blob);
byte[] bitmapdata = blob.toByteArray();
ardrone_Frame = BitmapFactory.decodeByteArray(bitmapdata , 0, bitmapdata.length);
}
显示部分
Thread thread=new Thread (new Runnable() {
Message message;
String obj="run";
int i;
long start;
@Override
public void run() {
// TODO Auto-generated method stub
Log.e("///enter thread ","THREAD");
while(true){
try {
Log.e("enter_video_thread","enter_video_thread");
receiveVideoRawData();
Log.e("///receiveVideoRawData ","receiveVideoRawData");
message = handler.obtainMessage(1,obj);
handler.sendMessage(message);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
});
public Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
String MsgString = (String)msg.obj;
if (MsgString.equals("run"))
{ Log.e("///enter handler ","HANDLER");
Toast.makeText(ArDroneMain.this,"save image ",Toast.LENGTH_SHORT).show();
//Bitmap bitmap = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory()+ "/ArdroneVideo.jpg");
myImageView.setImageBitmap(ardrone_Frame); ///Show the image
Toast.makeText(ArDroneMain.this,"show image",Toast.LENGTH_SHORT).show();
}
}
};
最佳答案
你可以把它做成动画。 为您的动画制作图像并保存在 png 格式的文件夹中。 使用下面的代码为这些图像制作动画
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="true">
<item android:drawable="@drawable/rocket_thrust1" android:duration="200" />
<item android:drawable="@drawable/rocket_thrust2" android:duration="200" />
<item android:drawable="@drawable/rocket_thrust3" android:duration="200" />
</animation-list>
然后
AnimationDrawable rocketAnimation;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);
rocketImage.setBackgroundResource(R.drawable.rocket_thrust);
rocketAnimation = (AnimationDrawable) rocketImage.getBackground();
}
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
rocketAnimation.start();
return true;
}
return super.onTouchEvent(event);
}
关于android - 在 Android 中显示连续图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15611611/