2011-07-19 19 views
7

Animasyonlu bir video görüntüleme kullanıyorum (video.setAnimation (slideinRight);) Her şey, geçişte yalnızca videonun değil, yalnızca videview'in düzeninin hareketli olduğu durumlar dışında çalışır. Çeviri animasyonu gerçekleştiğinde, videomda bir kutu taşıma ve maske görüyorum ancak video hiç bir zaman hareket etmiyor. Şimdi ne yapacağım konusunda bir kayıp yaşıyorum.VideoGörünüm Animasyon

cevap

2

Maalesef :) üzerinde

Başkalarının geri bildirimde bulunmak için memnuniyet duyarım. ve sadece 'slayt' animasyonu kullanmak için arıyorsanız. Videonun görünümünü bir düzende ve düzeni canlandırmayı deneyin.

Kodumda oluşturduğum şekilde;

AbsoluteLayout Animationlayout = (AbsoluteLayout)findViewById(R.string.frontlayout); 
VideoView pvv = new VideoView(getApplicationContext()); 
pvv.getHolder().addCallback(this); 
Animationlayout.addView(pvv); 
// load video data in pvv. 

Sonra kaydırmak için videoview animasyon istediğiniz yere;

Animationlayout.animate().xBy(25).setDuration(500).setInterpolator(new BounceInterpolator()); 

Bu, 3.1 animasyon sistemi olduğunu unutmayın.

Klasik 2.1 tarzı animasyon yönteminin böyle çalışacağından emin değilsiniz, ancak aynı işlevi görmelidir.

Düzeni döndürme/ölçekleme gibi şeyler işe yaramaz. Mizanpajın etrafını çevirmek ve soldurmak, işe yarayan sadece birkaç şey gibi görünüyor. TextureView here üzerinde

Daha referansı:

5

Şu anda VideoView üzerinde animasyon yerleştirmeye çalışıyorum. Android kaynak kodu bakarsak

, VideoView oyuncunun devlet makinesinin temel bir yönetim ile, bir MediaPlayer ile birleştiğinde, temelde a SurfaceView olduğunu.

Aslında gerçek 'çizmek' iş VideoView en Biz farklı cihazlarda animasyonlar test ettik

(android cihaz üzerinde gerçek oyuncu motor uygulaması aka) MediaPlayer yerli yöntemlerle ele alınması görünüyor ve tespit altta yatan video oynatıcı davranışı/uygulama farklı Android cihazlar arasında aynı değildir:

  • bazı cihazlar düzgün
  • diğerleri YAPMAYIN ve sadece bulanıklığı, siyah ekran veya hatalı ekranı görüntülemek oyuncunun görünümü animasyonlar işlemek ..

Bunun üzerine, VideoView doğrudan belleğe yazılıyor gibi görünüyor, bu nedenle herhangi bir 'geçici çözüm' (önüne opak bir görünüm koyma ve bu görünümde bir animasyon ayarlama gibi) işe yaramıyor gibi görünüyor. Bu ancak buna değer ne için, oldukça geç bu cevaplanması için

+0

Bunun için herhangi bir çözüm bulabildiniz mi? –

+0

Hayır, bizim uygulama için farklı bir tasarım uygulamak zorundaydık (VideoView taşıma değil, ama diğer parçaları hareket :-) Ancak, android 4.0 kod nasıl geliştiğini merak ediyorum. Ona bakmalıyız ... – Vinzzz

+0

Bazı cihazların OpenGL'nin doğru desteğine sahip olmaması nedeniyle düşünüyorum. Bu durumda cihaz bulanık veya siyah ekran görüntülüyor –

1

Basitçe TextureView kullanın. TextureView üzerinde ZoomOut animasyon -

Ben Zoomin yaptık.>anim klasörü -

Res yılında animasyon xml ekleyin.

zoom_in_out.xml:

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shareInterpolator="false"> 
    <scale 
     android:duration="1000" 
     android:fillAfter="false" 
     android:fromXScale="1.0" 
     android:fromYScale="1.0" 
     android:interpolator="@android:anim/accelerate_decelerate_interpolator" 
     android:pivotX="50%" 
     android:pivotY="50%" 
     android:toXScale="1.2" 
     android:toYScale="1.2" /> 
    <set android:interpolator="@android:anim/decelerate_interpolator"> 
     <scale 
      android:duration="1000" 
      android:fillBefore="false" 
      android:fromXScale="1.2" 
      android:fromYScale="1.2" 
      android:pivotX="50%" 
      android:pivotY="50%" 
      android:startOffset="500" 
      android:toXScale="1.0" 
      android:toYScale="1.0" /> 

    </set> 
</set> 

texture_layout.xml:

<?xml version="1.0" encoding="utf-8"?> 
<TextureView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/textureView" 
    android:layout_margin="50dp" 
    android:background="@android:color/darker_gray" 
    android:layout_width="wrap_content" android:layout_height="wrap_content"> 

</TextureView> 

TextureViewActivity.java:

import android.graphics.SurfaceTexture; 
import android.media.MediaPlayer; 
import android.net.Uri; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.view.Surface; 
import android.view.TextureView; 
import android.view.View; 
import android.view.animation.Animation; 
import android.view.animation.AnimationUtils; 
import java.io.IOException; 


public class TextureViewActivity extends AppCompatActivity implements TextureView.SurfaceTextureListener { 

    private TextureView textureView; 
    private MediaPlayer mMediaPlayer; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.texture_layout); 

     textureView = (TextureView)findViewById(R.id.textureView); 
     textureView.setSurfaceTextureListener(this); 

     textureView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Animation zoomAnimation = AnimationUtils.loadAnimation(TextureViewActivity.this, R.anim.zoom_in_out); 
       textureView.startAnimation(zoomAnimation); 
      } 
     }); 


    } 

    private String getVideoPath(){ 
     return "android.resource://" + getPackageName() + "/" + R.raw.promovideo; 
    } 


    @Override 
    public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int width, int height) { 
     Surface surface = new Surface(surfaceTexture); 
     try { 
      mMediaPlayer= new MediaPlayer(); 
      mMediaPlayer.setDataSource(TextureViewActivity.this, Uri.parse(getVideoPath())); 
      mMediaPlayer.setSurface(surface); 
      mMediaPlayer.prepare(); 
      mMediaPlayer.start(); 
      mMediaPlayer.setLooping(true); 
     } catch (IllegalArgumentException e) { 
      e.printStackTrace(); 
     } catch (SecurityException e) { 
      e.printStackTrace(); 
     } catch (IllegalStateException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) { 

    } 

    @Override 
    public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) { 
     return false; 
    } 

    @Override 
    public void onSurfaceTextureUpdated(SurfaceTexture surface) { 

    } 
} 

Tamam