GithubHelp home page GithubHelp logo

android-parallaxheaderviewpager's Introduction

Eat. Sleep. Android🤘

Hi everyone 👋 I have been developing Android Apps since 2010, and I'm very interested in UI/UX. I also share information through blog and Github.

Find me all around the web:

android-parallaxheaderviewpager's People

Contributors

cundong avatar kmshack avatar lolevsky avatar wuyisheng avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

android-parallaxheaderviewpager's Issues

Scroll from PagerSlidingTabStrip

Hello Guys
The scroll is not working when i try to do it from the PagerSlidingTabStrip view.. How can i fix that?
Thanks in advance

How can i use this with gridview.

Inside SampleListFragment you are adding a blank header what if we want to use a GridView or scrollView rather than ListView and in adjustScroll we can setSelectionFromTop in listView or setScroll in ScrollView but what about GridView ( setSelection is not working perfectly )?
How can we achieve that without setting a blank header.

Dynamic HeaderImage

Hi , this demo working perfectly but i want to set dynamic images in header , i am getting URL from server so after downloading image from Server i need to set it in header .Please let me know how it will work .

Listitems of variable size?

Will this work properly if the row elements in the listview are of different sizes?
The way getScrollY (on the basis of which Header is animated) is implemented, it looks as though scrolling will be smooth only if all elements are of equal size. Kindly correct me if I am wrong.

public int getScrollY(AbsListView view) {
    View c = view.getChildAt(0);
    if (c == null) {
        return 0;
    }

    int firstVisiblePosition = view.getFirstVisiblePosition();
    int top = c.getTop();

    int headerHeight = 0;
    if (firstVisiblePosition >= 1) {
        headerHeight = mHeaderHeight;
    }

    return -top + firstVisiblePosition * c.getHeight() + headerHeight;
}

Fixed Size Header.

Hello,

In your sample app you have kept the header size fixed.

As per my app's requirement i cannot keep it fixed.
I tried by changing the Header-FrameLayout and FakeHeader-FrameLayout to WrapContent. But it does not work. The Header gets fixed and does not scroll with the ListView.

Can you please help me??

How to use this for fragments containing layouts other than ListViews?

The ViewPager in my app contains layouts with ListViews, ExpandableListViews, ScrollView, RelativeLayout and LinearLayout(with a MapFragment in this).
Everything works fine for Tabs containing ListViews and ExpandableListViews! But.. not for the other layouts? How to proceed now?

Please Help me I'm trying to build an app for our college Festival.

Thanks!

Not able to run code

15921-15921/com.kmshack.newstand E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.kmshack.newstand, PID: 15921
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.kmshack.newstand/com.kmshack.newsstand.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.setAlpha(float)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2314)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2388)
at android.app.ActivityThread.access$800(ActivityThread.java:148)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1292)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5312)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.setAlpha(float)' on a null object reference
at com.nineoldandroids.view.ViewHelper$Honeycomb.setAlpha(ViewHelper.java:185)
at com.nineoldandroids.view.ViewHelper.setAlpha(ViewHelper.java:19)
at com.kmshack.newsstand.MainActivity.onCreate(MainActivity.java:78)
at android.app.Activity.performCreate(Activity.java:5953)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1128)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2267)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2388)
            at android.app.ActivityThread.access$800(ActivityThread.java:148)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1292)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5312)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696)

AppCompat v21 support?

Is there any way to get it working with the new appcompat support library? They introduced many changes on it and I don't find how to solve the problem of getActionBarIconView() always returning null.

Android.R.id.home returns null

I am using the same logic but getActionBarIcon() returns null. Actually android.R.id.home as a imageview is returning null.

@TargetApi(Build.VERSION_CODES.HONEYCOMB)
private ImageView getActionBarIconView() {

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        return (ImageView) findViewById(android.R.id.home);

    }

    return (ImageView) findViewById(android.support.v7.appcompat.R.id.home);
}

Help me please!!!!

how can I do set setCurrentItem function?

Hi

how can I do set setCurrentItem function?

after below code I get some errors :

 mViewPager.setCurrentItem(3);

errors :

at com.kmshack.newsstand.MainActivity.onPageSelected(MainActivity.java:145)
        at     com.astuetz.PagerSlidingTabStrip$PageListener.onPageSelected(PagerSlidingTabStrip.java:387)
        at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:548)
        at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:514)
        at android.support.v4.view.ViewPager.setCurrentItem(ViewPager.java:495)
        at     com.kmshack.newsstand.MainActivity.onCreate(MainActivity.java:126)//mViewPager.setCurrentItem(3);

Inactivity crash

After leaving the app in the background for a long while, you will get a crash when changing tab and and the header wont scroll...

add some animation

if the content of viewpager is little,can add some moving animation with header

null pointer exception

Hi

I would like to use this library in android studio.
after run it, I get this error :

03-23 22:57:12.966 13408-13408/com.kmshack.newsstand E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.kmshack.newsstand/com.kmshack.newsstand.MainActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2247)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2297)
at android.app.ActivityThread.access$700(ActivityThread.java:152)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1282)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5328)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.nineoldandroids.view.ViewHelper$Honeycomb.setAlpha(ViewHelper.java:185)
at com.nineoldandroids.view.ViewHelper.setAlpha(ViewHelper.java:19)
at com.kmshack.newsstand.MainActivity.onCreate(MainActivity.java:79)
at android.app.Activity.performCreate(Activity.java:5250)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1097)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2297)
            at android.app.ActivityThread.access$700(ActivityThread.java:152)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1282)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5328)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
            at dalvik.system.NativeStart.main(Native Method)

How to Keep Track of Scroll Position and Header Size Across Tabs (Enhancement) :)

I was having some problems implementing this because of it losing scroll position and not maintaining header size across tabs when I tried to get the scroll position working.

This is my solution:

A way you can hack it to make it remember scroll position as well as keep track of the header state across all tabs.

Not the best solution but might give someone some ideas:

SampleListFragment:
package com.kmshack.newsstand;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class SampleListFragment extends ScrollTabHolderFragment implements OnScrollListener {

private static final String ARG_POSITION = "position";

Map<String, String> map = new HashMap<String, String>();
int scrollh;

private ListView mListView;
private ArrayList mListItems;

private int mPosition;

private int index = -1;
private int top = 0;

int sheight;
int mMinHeaderHeight;

int mHeaderHeight;
public static Fragment newInstance(int position) {
SampleListFragment f = new SampleListFragment();
Bundle b = new Bundle();
b.putInt(ARG_POSITION, position);
f.setArguments(b);
return f;
}

@OverRide
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mPosition = getArguments().getInt(ARG_POSITION);

mListItems = new ArrayList<String>();

for (int i = 1; i <= 100; i++) {
    mListItems.add(i + ". item - currnet page: " + (mPosition + 1));
}

}

@OverRide
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_list, null);

mListView = (ListView) v.findViewById(R.id.listView);
mMinHeaderHeight = getResources().getDimensionPixelSize(R.dimen.min_header_height);
mHeaderHeight = getResources().getDimensionPixelSize(R.dimen.header_height);
View placeHolderView = inflater.inflate(R.layout.view_header_placeholder, mListView, false);
mListView.addHeaderView(placeHolderView);


return v;

}

@OverRide
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);

mListView.setOnScrollListener(this);
mListView.setAdapter(new ArrayAdapter<String>(getActivity(), R.layout.list_item, android.R.id.text1, mListItems));

}

@OverRide
public void onResume() {
super.onResume();

  if(index!=-1){
     //mListView.setSelectionFromTop(index, top);


  }


 // if(MainActivity.getscrollh()==288){

    //int nin =Integer.parseInt( map.get(""+mPosition+"n"+index));
    //mListView.setSelectionFromTop(nin, -mMinHeaderHeight+200);

    //mListView.setSelectionFromTop(nin, 1);
  //}

}

@OverRide
public void onPause() {
super.onPause();
try{
index = mListView.getFirstVisiblePosition();
View v = mListView.getChildAt(0);
top = (v == null) ? 0 : v.getTop();

     map.put(""+mPosition+"n"+index, ""+index);

  }
  catch(Throwable t){
     t.printStackTrace();
  }

}

@OverRide
public void adjustScroll(int scrollHeight) {
scrollh=scrollHeight;

MainActivity.setscrollh(scrollHeight);
if (scrollHeight == 0 && mListView.getFirstVisiblePosition() >= 0) {
return;
}

if(MainActivity.getscrollh()==288){

    int nin =Integer.parseInt( map.get(""+mPosition+"n"+index));
    mListView.setSelectionFromTop(nin, -mMinHeaderHeight+90);
}else{

    mListView.setSelectionFromTop(1, scrollHeight);
}

}

@OverRide
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
if (mScrollTabHolder != null)

    mScrollTabHolder.onScroll(view, firstVisibleItem, visibleItemCount, totalItemCount, mPosition);

 try{

     index = mListView.getFirstVisiblePosition();
     View v = mListView.getChildAt(0);
     top = (v == null) ? 0 : v.getTop();


     map.put(""+mPosition+"n"+index, ""+index);
 }
     catch(Throwable t){
         t.printStackTrace();
      }

}

@OverRide
public void onScrollStateChanged(AbsListView view, int scrollState) {
// nothing
}

}

MainActivity:
package com.kmshack.newsstand;

import android.annotation.TargetApi;
import android.graphics.RectF;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.util.SparseArrayCompat;
import android.support.v4.view.ViewPager;
import android.support.v7.app.ActionBarActivity;
import android.text.Spannable;
import android.text.SpannableString;
import android.util.TypedValue;
import android.view.View;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.widget.AbsListView;
import android.widget.ImageView;

import com.astuetz.PagerSlidingTabStrip;
import com.flavienlaurent.notboringactionbar.AlphaForegroundColorSpan;
import com.flavienlaurent.notboringactionbar.KenBurnsSupportView;
import com.nineoldandroids.view.ViewHelper;

public class MainActivity extends ActionBarActivity implements ScrollTabHolder, ViewPager.OnPageChangeListener {

static int scrollh;

private static AccelerateDecelerateInterpolator sSmoothInterpolator = new AccelerateDecelerateInterpolator();

private KenBurnsSupportView mHeaderPicture;
private View mHeader;

private PagerSlidingTabStrip mPagerSlidingTabStrip;
private ViewPager mViewPager;
private PagerAdapter mPagerAdapter;

private int mActionBarHeight;
private int mMinHeaderHeight;
private int mHeaderHeight;
private int mMinHeaderTranslation;
private ImageView mHeaderLogo;

private RectF mRect1 = new RectF();
private RectF mRect2 = new RectF();

private TypedValue mTypedValue = new TypedValue();
private SpannableString mSpannableString;
private AlphaForegroundColorSpan mAlphaForegroundColorSpan;

@OverRide
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

mMinHeaderHeight = getResources().getDimensionPixelSize(R.dimen.min_header_height);
mHeaderHeight = getResources().getDimensionPixelSize(R.dimen.header_height);
mMinHeaderTranslation = -mMinHeaderHeight + getActionBarHeight();

setContentView(R.layout.activity_main);

mHeaderPicture = (KenBurnsSupportView) findViewById(R.id.header_picture);
mHeaderPicture.setResourceIds(R.drawable.pic0, R.drawable.pic1);
mHeaderLogo = (ImageView) findViewById(R.id.header_logo);
mHeader = findViewById(R.id.header);

mPagerSlidingTabStrip = (PagerSlidingTabStrip) findViewById(R.id.tabs);
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setOffscreenPageLimit(4);

mPagerAdapter = new PagerAdapter(getSupportFragmentManager());
mPagerAdapter.setTabHolderScrollingContent(this);

mViewPager.setAdapter(mPagerAdapter);

mPagerSlidingTabStrip.setViewPager(mViewPager);
mPagerSlidingTabStrip.setOnPageChangeListener(this);
mSpannableString = new SpannableString(getString(R.string.actionbar_title));
mAlphaForegroundColorSpan = new AlphaForegroundColorSpan(0xffffffff);

ViewHelper.setAlpha(getActionBarIconView(), 0f);

getSupportActionBar().setBackgroundDrawable(null);

}

@OverRide
public void onPageScrollStateChanged(int arg0) {
// nothing
}

@OverRide
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
// nothing
}

@OverRide
public void onPageSelected(int position) {
SparseArrayCompat scrollTabHolders = mPagerAdapter.getScrollTabHolders();
ScrollTabHolder currentHolder = scrollTabHolders.valueAt(position);

currentHolder.adjustScroll((int) (mHeader.getHeight() + ViewHelper.getTranslationY(mHeader)));

}

@OverRide
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount, int pagePosition) {
if (mViewPager.getCurrentItem() == pagePosition) {
int scrollY = getScrollY(view);
ViewHelper.setTranslationY(mHeader, Math.max(-scrollY, mMinHeaderTranslation));
float ratio = clamp(ViewHelper.getTranslationY(mHeader) / mMinHeaderTranslation, 0.0f, 1.0f);
interpolate(mHeaderLogo, getActionBarIconView(), sSmoothInterpolator.getInterpolation(ratio));
setTitleAlpha(clamp(5.0F * ratio - 4.0F, 0.0F, 1.0F));
}
}

@OverRide
public void adjustScroll(int scrollHeight) {
// nothing
}

public int getScrollY(AbsListView view) {
View c = view.getChildAt(0);
if (c == null) {
return 0;
}

int firstVisiblePosition = view.getFirstVisiblePosition();
int top = c.getTop();

int headerHeight = 0;
if (firstVisiblePosition >= 1) {
    headerHeight = mHeaderHeight;
}

return -top + firstVisiblePosition * c.getHeight() + headerHeight;

}

public static float clamp(float value, float max, float min) {
return Math.max(Math.min(value, min), max);
}

private void interpolate(View view1, View view2, float interpolation) {
getOnScreenRect(mRect1, view1);
getOnScreenRect(mRect2, view2);

float scaleX = 1.0F + interpolation * (mRect2.width() / mRect1.width() - 1.0F);
float scaleY = 1.0F + interpolation * (mRect2.height() / mRect1.height() - 1.0F);
float translationX = 0.5F * (interpolation * (mRect2.left + mRect2.right - mRect1.left - mRect1.right));
float translationY = 0.5F * (interpolation * (mRect2.top + mRect2.bottom - mRect1.top - mRect1.bottom));

ViewHelper.setTranslationX(view1, translationX);
ViewHelper.setTranslationY(view1, translationY - ViewHelper.getTranslationY(mHeader));
ViewHelper.setScaleX(view1, scaleX);
ViewHelper.setScaleY(view1, scaleY);

}

private RectF getOnScreenRect(RectF rect, View view) {
rect.set(view.getLeft(), view.getTop(), view.getRight(), view.getBottom());
return rect;
}

@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public int getActionBarHeight() {
if (mActionBarHeight != 0) {
return mActionBarHeight;
}

if(Build.VERSION.SDK_INT > Build.VERSION_CODES.HONEYCOMB){
    getTheme().resolveAttribute(android.R.attr.actionBarSize, mTypedValue, true);
}else{
    getTheme().resolveAttribute(R.attr.actionBarSize, mTypedValue, true);
}

mActionBarHeight = TypedValue.complexToDimensionPixelSize(mTypedValue.data, getResources().getDisplayMetrics());

return mActionBarHeight;

}

private void setTitleAlpha(float alpha) {
mAlphaForegroundColorSpan.setAlpha(alpha);
mSpannableString.setSpan(mAlphaForegroundColorSpan, 0, mSpannableString.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
getSupportActionBar().setTitle(mSpannableString);
}

@TargetApi(Build.VERSION_CODES.HONEYCOMB)
private ImageView getActionBarIconView() {

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){
    return (ImageView)findViewById(android.R.id.home);
}

return (ImageView)findViewById(android.support.v7.appcompat.R.id.home);

}

public class PagerAdapter extends FragmentPagerAdapter {

private SparseArrayCompat<ScrollTabHolder> mScrollTabHolders;
private final String[] TITLES = { "Page 1", "Page 2", "Page 3", "Page 4"};
private ScrollTabHolder mListener;

public PagerAdapter(FragmentManager fm) {
    super(fm);
    mScrollTabHolders = new SparseArrayCompat<ScrollTabHolder>();
}

public void setTabHolderScrollingContent(ScrollTabHolder listener) {
    mListener = listener;
}

@Override
public CharSequence getPageTitle(int position) {
    return TITLES[position];
}

@Override
public int getCount() {
    return TITLES.length;
}

@Override
public Fragment getItem(int position) {
    ScrollTabHolderFragment fragment = (ScrollTabHolderFragment) SampleListFragment.newInstance(position);

    mScrollTabHolders.put(position, fragment);
    if (mListener != null) {
        fragment.setScrollTabHolder(mListener);
    }

    return fragment;
}

public SparseArrayCompat<ScrollTabHolder> getScrollTabHolders() {
    return mScrollTabHolders;
}

}

public static void setscrollh(int h){
scrollh=h;

}

public static int getscrollh(){

return scrollh;

}

}

I added a hashmap that keeps track of the scrolling position for each listview. Views settings are automatically added to the hashmap and then their settings are loaded back when needed.

I also wrote a function in the activity that basically keeps track of the scroll height. Obviously the header height is changing in 1 listview and when we switch tabs we want to be able to ask the activity the height of the original header. We then do a check to see if it was the minimum header size or the full header size then we simply do some tweaking to align things a bit.

There are probably better ways to do it... this is just an idea that allows you to keep track of scroll positions across listviews and maintain headers.

:)

If anyone comes up with anything better or this helps in anyway do let me know.

Image is not displayed initially

Hi,

I edited the layout a bit for my project's purpose as below:

    <com.flavienlaurent.notboringactionbar.KenBurnsView
        android:id="@+id/header_picture"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@drawable/picture0" />

// I replace the imageview with a custom view

        <ImageView
            android:id="@+id/header_logo"
            android:layout_width="@dimen/header_logo_size"
            android:layout_height="@dimen/header_logo_size"
            android:layout_centerInParent="true"
            android:layout_alignParentTop="true"
            android:paddingTop="15dp"
            />

        <ImageView
            android:id="@+id/header_logo_hide"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_centerHorizontal="true" />

        <TextView
            android:id="@+id/header_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/header_logo"
            android:layout_centerHorizontal="true
            android:paddingTop="20dp"
            android:textSize="20dp"
            android:textStyle="bold" />
  </RelativeLayout>

</FrameLayout>

and I use this layout in a fragment, so the code was changed a bit to work in fragment

  • The view was inflated in onCreateView and onActivityCreated.
  • Instead of interpolating header_logo to the action bar icon, I want header_logo to interpolating to the header_logo_hide. The code changed:
    interpolate(mHeaderLogo, mHeaderLogoHide, sSmoothInterpolator.getInterpolation(ratio));

Issue: when open the fragment, the header_logo is not displayed unless I make a initial action like scroll or touch or click.

Please help to advise me.

can replace Translation animation to setpadding

i can't click pagerSlidingTabStrip's children. because os 2.3 can't support layout change after animated moving. so finally write this
if (pre Honeycome) {
mHeader.setPadding(0, Math.max(-scrollY, mMinHeaderTranslation), 0, 0);
} else {
ViewHelper.setTranslationY(mHeader, Math.max(-scrollY, mMinHeaderTranslation));
}

How to use RecyclerView instead of ListView?

Hello,

I am using this library for my App. But i have Recycler view with in the tabs and your example is for ListView. OnScrollListener interface in ListView while it is abstract class with in the recyclerview. Now i am little confuse to use your library with that same. Can you please update it to have recyclerview support? or please let me know how i can update it to have support for the recyclerview.

Sincerely,
Shreyash.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.