1

我想排除視圖組讓我們說從共享元素的回收視圖返回轉換。但事情是我不希望所有的回收者觀點的孩子排除我想要特定的回收者觀點孩子包括過渡。從轉換中排除除一個特定子項外的ViewGroup

Slide transition = new Slide(Gravity.END); 
transition.excludeTarget(recyclerView, true); 
transition.addTarget(ImageView.class); 
setExitTransition(transition); 
setReturnTransition(transition); 

我不明白爲什麼上面的代碼不工作。請讓我知道,如果你有任何想法或任何方式來實現這一目標?

+0

你用這段代碼得到了什麼? – azizbekian

+0

它只是排除整個recyclerview。我的一個回收器視圖項目中有一個imageview。它不尊重這個'transition.addTarget(ImageView.class);' – santalu

回答

1

什麼問題?

的問題來自Transition#captureValues()功能if聲明:

 

    void captureValues(ViewGroup sceneRoot, boolean start) { 
     clearValues(start); 
     if ((mTargetIds.size() > 0 || mTargets.size() > 0) 
       && (mTargetNames == null || mTargetNames.isEmpty()) 
       && (mTargetTypes == null || mTargetTypes.isEmpty())) { 
      ... 
     } else { 
      captureHierarchy(sceneRoot, start); 
     } 
     ... 
    } 
 

第一條語句沒有通過,因而執行else情況下,使您的addTarget(ImageView.class)被忽略。

爲什麼第一條語句不通過?

由於addTarget(Class)will changemTargetTypes字段,從而既mTargetIdsmTargets將被留爲空。

取而代之,執行addTarget(int),其中will changemTargetIds

因此,這裏是你的過渡將是什麼樣子:

 

    Slide transition = new Slide(Gravity.END); 
    transition.addTarget(R.id.some_imageview); 
    setExitTransition(transition); 
    setReturnTransition(transition); 
 

無需進行transition.excludeTarget(),因爲在addTarget() docs說:

設置targetIds約束過渡到只監聽,並採取行動,用這些ID查看。具有不同ID的視圖或任何ID都將被忽略。

+0

感謝您的好解釋。如果視圖組具有背景,則仍會將背景添加到過渡。你有什麼想法爲什麼? – santalu

+0

你可以發佈一個gif的行爲嗎? – azizbekian

+0

對不起,我剛剛意識到它按預期工作。但我的實際問題依然存在。我試圖在recyclerview上實現回拉動畫。我已將viewPager作爲回收者查看項目。 viewPager包含一個imageview。我試圖做一個幻燈片過渡,如果viewPager位置大於0.但它不知道怎麼做幻燈片轉換。你可以從[gif](https://media.giphy.com/media/tV1PsEnENNR3G/giphy.gif)看到它。如果你能幫助或給我關於這方面的想法,我會非常感激。否則,我只是會接受你的答案,因爲它是。 – santalu

相關問題