Ho avuto lo stesso problema e ho passato molte ore a cercare una soluzione. La mia soluzione era aggiungere le viste compresse (ImageView e TextView) all'interno dello CollapsingToolbarLayout
e quindi gestire la transizione nel codice. In questo modo è più flessibile e più semplice dell'estensione da CollapsingToolbarLayout.
primo luogo è necessario aggiungere le vostre opinioni all'interno del CollapsingToolbarLayout
con le proprietà di parallasse:
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop:"80dp"
android:src="@drawable/icon"
app:layout_collapseMode="parallax"
app:layout_collapseParallaxMultiplier="0.8"/> //set vertical transition here
quindi impostare la scala delle opinioni con l'aiuto di un OnOffsetchangeListner
:
private static final float SCALE_MINIMUM=0.5f;
appBarLayout.setOnWorkingOffsetChange(new ControllableAppBarLayout.OnWorkingOffsetChange() {
@Override
public void onOffsetChange(int offSet, float collapseDistance) {
imageView.setScaleX(1 + (collapseDistance * SCALE_MINIMUM));
imageView.setScaleY(1 + (collapseDistance * SCALE_MINIMUM));
textView.setScaleX(1 + (collapseDistance * SCALE_MINIMUM));
textView.setScaleY(1 + (collapseDistance * SCALE_MINIMUM));
// You can also setTransitionY/X, setAlpha, setColor etc.
}
});
In qualche modo il valore predefinito offsetChangedListener
non ha funzionato correttamente per me (probabilmente dovresti provarlo con il listener predefinito per primo), quindi ho utilizzato lo ControllableAppBarLayout
da https://gist.github.com/blipinsk/3f8fb37209de6d3eea99 e aggiunto quanto segue:
private OnWorkingOffsetChange onWorkingOffsetChange;
@Override
public void onOffsetChanged(AppBarLayout appBarLayout, int i) {
if (!isInEditMode()) {
onWorkingOffsetChange.onOffsetChange(i, (float) i/appBarLayout.getTotalScrollRange());
}
}
public void setOnWorkingOffsetChange(OnWorkingOffsetChange listener) {
this.onWorkingOffsetChange = listener;
}
public interface OnWorkingOffsetChange {
void onOffsetChange(int offSet, float collapseDistance);
}
L'unico problema è che si avrebbe bisogno di impostare app:contentScrim="#00000000"
(trasparente) per il vostro CollapsingToolbarLayout
, in modo che le opinioni sono ancora visibili quando la barra è compressa. Se hai davvero bisogno dell'effetto background collassante, sono sicuro che potresti "simulare" questo impostando l'alfa di uno sfondo ImageView nello OffsetChangeListener
. ;)
Hai provato un 'CollapsingToolbarLayout' contenente prima un 'ImageView' e poi un' LinearLayout' con 2 'TextView's? – shkschneider
Ho provato, ma il mio scopo è la sostituzione del titolo con il mio CustomView per preservare l'animazione del titolo nella barra degli strumenti. – CeccoCQ
@shkschneider spiegheresti un po 'di più. Voglio usare –