2017-06-02 61 views
0

我正在爲我的活動創建轉場。我已經設定爲過渡排除導航和狀態欄:防止轉換時閃爍的decorView背景

<targets> 
     <target android:excludeId="@android:id/statusBarBackground"/> 
     <target android:excludeId="@android:id/navigationBarBackground"/> 
    </targets> 

我的問題是,我使用設置應用背景:

getWindow().getDecorView().setBackgroundColor(COLOR); 

正因爲如此,當我的轉變開始或結束,這我之前設置的顏色,在轉換之間在屏幕上閃爍。我怎麼能阻止呢?有沒有可以放入目標的ID?

回答

0

Transition#getTargets()

返回目標的列表視圖,這種轉變本身的限制,以跟蹤和動畫。如果該列表是空getTargetIds()getTargets()getTargetNames(),並getTargetTypes()那麼這種轉變並不限於特定的意見,並將處理變化的場景變化的層次結構的任何意見。要獲得

轉換API將使用指定的TransitiongetTargets()爲了找出View的需要。只要你沒有明確地爲轉換指定一個目標視圖,那麼整個視圖層次就可以獲得更改。因此,decorView也將參與轉型。相反,你可以指定爲目標視圖層次的根,從而消除decorView從轉變:

<fade xmlns:android="http://schemas.android.com/apk/res/android"> 

    <targets> 
    <target android:excludeId="@android:id/statusBarBackground"/> 
    <target android:excludeId="@android:id/navigationBarBackground"/> 
    <target android:targetId="@id/root"/> 
    </targets> 

</fade> 

有什麼ID,我可以把裏面的目標?

decorView沒有ID與之相關聯的,這就是爲什麼它是不可能通過xml做。您可以充氣/獲取Transition當前窗口,並添加/編程排除目標:

 

    Transition t = new Fade(); 

    // Inflating a transition from /transition/my_transition.xml 
    // t = TransitionInflater.from(this).inflateTransition(R.transition.my_transition); 

    // If transition is set through theme via `android:windowExitTransition` 
    // t = getWindow().getExitTransition(); 

    // Adding a target 
    // t.addTarget(rootView); 

    // Excluding decorView, which will exclude all children too 
    t.excludeTarget(getWindow().getDecorView(), true); 
    t.excludeTarget(android.R.id.statusBarBackground, true); 
    t.excludeTarget(android.R.id.navigationBarBackground, true); 

    getWindow().setExitTransition(t); 
 
+0

嗨azizbekian,我想在這裏和什麼也沒有發生。我將推遲的呼叫發佈到supportStartPostponedEnterTransition,並且在轉換不開始時,屏幕顯示裝飾視圖背景。 – user2494863

+0

我沒有說,它不會顯示背景。只是它不會參與轉型。你的問題問到如何防止閃爍。閃爍正在發生,因爲淡入淡出轉換正在應用於decorView。你還看到它閃爍? – azizbekian

+0

是的,它顯示了一切的背景。當我刪除帖子延遲時,它會閃爍此背景。 – user2494863