I am working on an app, which can run on Froyo
as well as JellyBean
. I have a class that extends PageTransformer as below:
import a
Also, If you want use PageTransformer
even in 2.2. You must change some validation that are made in the ViewPager
class. Check out this example
The easiest solution is to use the NineOldAndroids library, which backports the animations to all versions of Android. The Usage section has examples of how you'd use the library.
To be both forward and backward compatible I use following implementation for my views:
private void fadeOut(final View view) {
int sdk = android.os.Build.VERSION.SDK_INT;
if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {
AlphaAnimation alpha = new AlphaAnimation(1f, 0f);
alpha.setDuration(mAnimationDuration);
alpha.setFillAfter(true);
view.startAnimation(alpha);
} else {
view.animate()
.alpha(0f)
.setDuration(mAnimationDuration)
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
view.setVisibility(View.GONE);
}
});
}
}
private void fadeIn(View view) {
int sdk = android.os.Build.VERSION.SDK_INT;
if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {
view.setVisibility(View.VISIBLE);
AlphaAnimation alpha = new AlphaAnimation(0f, 1f);
alpha.setDuration(mAnimationDuration);
alpha.setFillAfter(true);
view.startAnimation(alpha);
} else {
view.setAlpha(0f);
view.setVisibility(View.VISIBLE);
view.animate()
.alpha(1f)
.setDuration(mAnimationDuration)
.setListener(null);
}
}
In case anyone is cough lazy and wants the ZoomOutPageTransformer compatible back to API 8. Uses nineoldandroids and the ViewHelper class.
package com.weddingwire.vendorsearch.Animation;
import android.support.v4.view.ViewPager;
import android.view.View;
import com.nineoldandroids.view.ViewHelper;
public class ZoomOutPageTransformer implements ViewPager.PageTransformer {
private static float MIN_SCALE = 0.85f;
private static float MIN_ALPHA = 0.5f;
public void transformPage(View view, float position) {
int pageWidth = view.getWidth();
int pageHeight = view.getHeight();
if (position < -1) { // [-Infinity,-1)
// This page is way off-screen to the left.
ViewHelper.setAlpha(view, 0);
} else if (position <= 1) { // [-1,1]
// Modify the default slide transition to shrink the page as well
float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position));
float vertMargin = pageHeight * (1 - scaleFactor) / 2;
float horzMargin = pageWidth * (1 - scaleFactor) / 2;
if (position < 0) {
ViewHelper.setTranslationX(view, (horzMargin - vertMargin / 2));
} else {
ViewHelper.setTranslationX(view, -horzMargin + vertMargin / 2);
}
// Scale the page down (between MIN_SCALE and 1)
ViewHelper.setScaleX(view, scaleFactor);
ViewHelper.setScaleY(view, scaleFactor);
// Fade the page relative to its size.
ViewHelper.setAlpha(view, MIN_ALPHA +
(scaleFactor - MIN_SCALE) /
(1 - MIN_SCALE) * (1 - MIN_ALPHA));
} else { // (1,+Infinity]
// This page is way off-screen to the right.
ViewHelper.setAlpha(view, 0);
}
}
}
so, some resolutions here:
setAlphaAnimation … API LEVEL 1
AlphaAnimation alpha = new AlphaAnimation(0.7F, 0.7F);
alpha.setDuration(0); // Make animation instant
alpha.setFillAfter(true); // Tell it to persist after the animation ends
view.startAnimation(alpha);
setAlpha INT -> From API LEVEL 1 -> deprecated in 16
Drawable background = localLinLayout.getBackground();
background.setAlpha(180); //255 is max (visible)
setAlpha
FLOAT -> API Level 11+ ->
setImageAlpha
-> API LEVEL 16+ (use just for ImageViews)