2013-03-25 4 views
1

Я хочу показать около 30 фотографий за одну секунду, чтобы они отображались как видео.Отображение непрерывного изображения в Android

Я использую Android ImageView через некоторое время (TRUE), но ImageView не изменяется, как я ожидал.

ImageView изменить картину для около в секунду, так что интересно, если есть другой способ

показать мои фотографии?

Фотография была переведена из камеры с помощью UdP, и я в первую очередь необходимо хранить в буфере и

чем дисплей.

Вышеупомянутая часть вызывает задержку в 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(); 
      } 

    } 
}; 
+0

сделать и хотите, чтобы загрузить изображения динамически? или он хранится в res? –

+0

«ImageView» необходимо перерисовать после каждого изображения. Можете ли вы показать код, который вы используете в настоящее время? – Tigger

ответ

4

вы можете сделать это, сделав его анимацией. Сделайте изображения для своей анимации и сохраните их в папке в формате 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); 
} 
0

Вы всегда можете использовать FFmpeg для создания видео изображений и также использовать TimerTask

delay=1000/totalImages; 

myTimer = new Timer(); 
     myTimer.schedule(new TimerTask() {   
      @Override 
      public void run() { 

          if(count==imgArr.length) 
           cancel(); 

          imageView.setImageResource(imgArr[count]); 
          count++;  

      } 

     }, 0, delay); 
Смежные вопросы