2011-12-29 20 views
11

पर एनिमेट व्यू जोड़ा गया है मेरे पास WindowManager में एक दृश्य (कस्टम व्यू) जोड़ा गया है।विंडोमैनेजर

WindowManager mWm = (WindowManager)activity.getApplicationContext().getSystemService(Context.WINDOW_SERVICE); 
WindowManager.LayoutParams(WindowManager.LayoutParams.FILL_PARENT, 0, PixelFormat.TRANSPARENT); 
mWl.dimAmount = 0.0f; 
mWm.addView(customView, mWl); 

कस्टम दृश्य के अंदर, मैं एक एनीमेशन का अनुवाद जब बंद करें बटन दबाया जाता है कॉल करेंगे।

//// इस एनीमेशन के लिए हैंडलर है ////

final Handler translateHandler = new Handler(); 

final Runnable mtranslateUp = new Runnable() { 
    public void run() { 
     Log.v("TEST","mtranslateUp Runnable"); 
     startAnimation(translateUp); 
    } 
}; 

//// इस बंद करें बटन के लिए श्रोता है ////

View.OnClickListener closeButtonListener = new View.OnClickListener() {   

    public void onClick(View v) { 
     translateHandler.post(mtranslateUp); 
    } 
}; 

//// यह ऊपर का अनुवाद एनीमेशन ////

translateUp = new TranslateAnimation(0,0,0,-200); 
translateUp.setFillAfter(true); 
translateUp.setDuration(1000); 
translateUp.setAnimationListener(new AnimationListener(){ 
     @Override 
     public void onAnimationEnd(Animation animation) { 
      Log.v("TEST","translateUp onAnimationEnd"); 
     } 

     @Override 
     public void onAnimationRepeat(Animation animation) { 
     } 

     @Override 
     public void onAnimationStart(Animation animation) { 
      Log.v("TEST","translateUp onAnimationStart"); 
     }} 
    ); 

customView एक गतिविधि को जोड़ दिए है, इन कोड ठीक काम करता है!

जब कस्टमव्यू को विंडोमैनेजर में जोड़ा जाता है, तो ऑन-एनीमेशन स्टार्ट के अंदर लॉग दिखाई नहीं देता है लेकिन रननेबल के अंदर लॉग दिखाया जा सकता है।

क्या कोई बता सकता है कि विंडो मैनेजर में जोड़े गए दृश्य पर एनीमेशन कैसे करें?

+0

क्या आपके पास इसके लिए कोई समाधान है? कृपया साझा करें, मुझे भी एक ही समस्या का सामना करना पड़ रहा है – om252345

उत्तर

7

मुझे विंडोमैनेजर से जुड़े एक दृश्य के साथ समान समस्या का सामना करना पड़ रहा था। सीधे देखें देखने से WindoManager में ViewGroup जोड़ने का प्रयास करें। यह काम करना चाहिए।

+0

मैंने कोशिश की और यह काम नहीं किया :( – BVB

+0

टिप के लिए धन्यवाद। मेरे लिए काम करता है :) – alex

+0

यह भी मेरे लिए काम करता है! महान टिप –

0

windowManager एंड्रॉइड सिस्टम द्वारा एनीमेशन की आवश्यकता है। इसलिए कस्टम एनीमेशन काम नहीं करेगा

10

आपको लेआउट पैरामीटर को एनिमेट करना चाहिए।

public void updateViewLayout(View view, Integer x, Integer y, Integer w, Integer h){ 
    if (view!=null) { 
     WindowManager.LayoutParams lp = (WindowManager.LayoutParams) view.getLayoutParams(); 

     if(x != null)lp.x=x; 
     if(y != null)lp.y=y; 
     if(w != null && w>0)lp.width=w; 
     if(h != null && h>0)lp.height=h; 

     mWindowService.updateViewLayout(view, lp); 
    } 
} 

जाहिर mWindowService context.getSystemService (Context.WINDOW_SERVICE) है: उदाहरण के लिए मैं व्यू लेआउट अद्यतन करने के लिए एक विधि का उपयोग करें। मैं इस विधि को एनीमेशन में ट्रिगर करता हूं:

public static void overlayAnimation(final View view2animate, int viewX, int endX) { 
    ValueAnimator translateLeft = ValueAnimator.ofInt(viewX, endX); 
    translateLeft.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { 
     @Override 
     public void onAnimationUpdate(ValueAnimator valueAnimator) { 
      int val = (Integer) valueAnimator.getAnimatedValue(); 
      updateViewLayout(view2animate, val, null, null, null); 

     } 
    }); 
    translateLeft.setDuration(ANIMATION_DURATION); 
    translateLeft.start(); 
} 
+1

कूल, यह सही करने का तरीका है व्यू ग्रुप – qbasso

+0

में लपेटने के बिना यह एकमात्र समाधान है जो मेरे लिए काम करता है, धन्यवाद! मैंने अनुवाद एनीमेशन का उपयोग करने की कोशिश की लेकिन कोई पासा नहीं। –

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^