2011-07-19 8 views
7

मैं एक एनीमेशन के साथ एक videoview उपयोग कर रहा हूँ (video.setAnimation (slideinRight);) सब कुछ है कि को छोड़कर ठीक काम करता है संक्रमण पर, केवल videview के लेआउट एनिमेट होने पर वीडियो नहीं। जब अनुवाद एनीमेशन होता है, तो मुझे अपने वीडियो पर एक बॉक्स चाल और मास्क दिखाई देता है लेकिन वीडियो इसके साथ कभी नहीं चलता है। मुझे अब क्या करना है इस पर एक नुकसान हुआ है।VideoView एनीमेशन

उत्तर

2

इस बल्कि देर से जवाब देने के लिए क्षमा करें :) पर है, लेकिन क्या इसके लायक है के लिए दूसरों को प्रतिक्रिया है करने में खुशी होगी। और यदि आप केवल 'स्लाइड' एनीमेशन का उपयोग करने के लिए देख रहे हैं। videoview को लेआउट में डालने और लेआउट एनिमेट करने का प्रयास करें।

तरह से मैं इसे सेट अप में मेरी कोड है;

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

फिर जहां आप स्लाइड करने के लिए अपने वीडियोव्यू को एनिमेट करना चाहते हैं;

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

ध्यान दें कि यह 3.1 एनीमेशन सिस्टम है।

animating की क्लासिक 2.1 रास्ते से सुनिश्चित नहीं हैं कि इस तरह काम करने के लिए जा रहा है, लेकिन यह एक ही काम करना चाहिए।

सामग्री घूर्णन की तरह/लेआउट स्केलिंग काम नहीं करेगा। चारों ओर लेआउट पॅनिंग और इसे लुप्त करना केवल काम करने वाली कुछ चीजें हैं। TextureView here पर

अधिक संदर्भ:

5

मैं वर्तमान में VideoView पर एनिमेशन डाल करने के लिए कोशिश कर रहा हूँ।

आप Android स्रोत कोड को देखें, तो VideoView मूल रूप से a SurfaceView, एक MediaPlayer के साथ मिलकर खिलाड़ी के राज्य मशीन की एक बुनियादी प्रबंधन के साथ है।

वास्तव में, असली 'आकर्षित' काम

हम विभिन्न उपकरणों पर एनिमेशन परीक्षण किया है (अपने Android डिवाइस पर असली खिलाड़ी इंजन कार्यान्वयन उर्फ) MediaPlayer में देशी तरीकों द्वारा नियंत्रित किया जा रहा है, और है कि पाया VideoView के अंतर्निहित वीडियो प्लेयर व्यवहार/कार्यान्वयन अलग Android उपकरणों के बीच में ही नहीं है:

  • कुछ उपकरणों खिलाड़ी के दृश्य एनिमेशन संभाल सही ढंग से
  • दूसरों को नहीं, और सिर्फ कलंक, काली स्क्रीन, या गाड़ी प्रदर्शन प्रदर्शित ..

उस पर, वीडियो व्यू सीधे मेमोरी पर लिखा जाता है, इसलिए कोई भी 'वर्कअराउंड' (सामने एक अपारदर्शी दृश्य डालने और उस दृश्य पर एनीमेशन सेट करने की तरह) काम नहीं करता है।

मैं इस

+0

क्या आप इसके लिए कोई समाधान ढूंढ पाए? –

+0

नहीं, हमें अपने आवेदन के लिए एक अलग डिज़ाइन लागू करना था (वीडियो व्यू को नहीं ले जाना, लेकिन अन्य हिस्सों को स्थानांतरित करना :-) हालांकि, मुझे आश्चर्य है कि एंड्रॉइड 4.0 में कोड कैसे विकसित हुआ है। इसे देखना चाहिए ... – Vinzzz

+0

मुझे लगता है क्योंकि कुछ डिवाइस में ओपनजीएल का सही समर्थन नहीं है। उस स्थिति में डिवाइस धुंध या ब्लैक स्क्रीन प्रदर्शित कर रहा है –

1

सीधे शब्दों में TextureView का उपयोग करें। TextureView पर Zoomout एनीमेशन -

मैं zoomin किया है।>anim फ़ोल्डर -

रेस में एनीमेशन एक्सएमएल जोड़ें।

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) { 

    } 
} 

हो गया