2016-05-11 4 views
0

TextureViewをフェードインしようとしていますが、何らかの理由でアニメーション化されていません。単にビデオをポップするだけで、何のフェードもありません。私はTextureViewが正常にアニメーション化できることをいくつかの研究の後に知っているからです。TextureViewをアニメーション化する方法は?

ここに私のコードです、私はあなたが私に正しい方向に私にポインタを与えることを願っています。

PS、私はtextureviewとアニメーションに関係しない無関係なコードをすべて省いています。

public class MainActivity extends AppCompatActivity implements MediaPlayer.OnPreparedListener, MediaPlayer.OnCompletionListener 
{ 
    private static final String TAG = MainActivity.class.getSimpleName(); 

    private MediaPlayer mediaPlayer1; 
    private ArrayList<Uri> videoUris = new ArrayList<>(); 
    private int current_video_index = 0; 

    private TextureView textureView; 

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

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

     mediaPlayer1 = new MediaPlayer(); 
     mediaPlayer1.setAudioStreamType(AudioManager.STREAM_MUSIC); 
     mediaPlayer1.setOnPreparedListener(this); 
     mediaPlayer1.setOnCompletionListener(this); 

     initVideoUris(); 
     initNewVideo(); 
    } 

    private void startVideo(final Uri uri) 
    { 
     textureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() 
     { 
      @Override 
      public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) 
      { 
       try { 
        mediaPlayer1.setDataSource(MainActivity.this, uri); 
        mediaPlayer1.setSurface(new Surface(surface)); 
        mediaPlayer1.setOnCompletionListener(MainActivity.this); 
        mediaPlayer1.setOnPreparedListener(MainActivity.this); 
        mediaPlayer1.setAudioStreamType(AudioManager.STREAM_MUSIC); 

        mediaPlayer1.prepareAsync(); 
       } 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) 
      { 

      } 
     }); 
    } 

    @Override 
    public void onPrepared(MediaPlayer mp) 
    { 
     mp.start(); 
     fadeInView(textureView); 
    } 

    @Override 
    public void onCompletion(MediaPlayer mp) 
    { 
     if (!moreVideosAvailable()) 
     { 
      finish(); 
     } 
    } 

    private boolean moreVideosAvailable() 
    { 
     return current_video_index < videoUris.size(); 
    } 

    private void fadeInView(View view) 
    { 
     view.setAlpha(0f); 
     view.setVisibility(View.VISIBLE); 
     view.animate().alpha(1f).setDuration(2000).setListener(null).start(); 
    } 
} 
+0

私はTextureViewsとAnimationsでも問題がありました。 使用中のSurface上の ".setAlpha"を防ぐMediaPlayerと何らかの関係があります。 – Bam

+0

@Bam私は実際に別の方法で問題を解決しました。私はアニメーションを置くビデオプレイヤーフラグメントを作った。それがトリックでした。 – CantThinkOfAnything

答えて

0

TextureViewをビデオ表示用のサーフェイスとして使用するvideoPlayerFragmentを作成して解決しました。次に、単にtextureViewの代わりにフラグメント全体をアニメーション化します。

関連する問題