Android рдХреЗ рд▓рд┐рдП Header2ActionBar рд▓рд╛рдЗрдмреНрд░реЗрд░реА

(рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдореЛ)
рдЖрдкрдиреЗ рд╢рд╛рдпрдж Google (Play Music, Google Press) рдФрд░ рд╕рдВрднрд╡рддрдГ, рдХреБрдЫ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рдиреЛрдВ рдореЗрдВ рд╕рдорд╛рди рджреЗрдЦрд╛ рд╣реЛрдЧрд╛ред рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП,
ManuelPeinado ,
FadingActionBar рд╕реЗ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп, рдХрд╛рдлреА рд╕рдордп рд╕реЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рд╣реИ, рдЬреЛ рдЕрдкрдиреЗ рдХрд╛рд░реНрдп рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдЗрд╕рдореЗрдВ рджреЛ "рдШрд╛рддрдХ" рдХрдорд┐рдпрд╛рдВ рд╣реИрдВред
рджреВрд╕рд░реЗ рдХреЛ рдПрдХ рдЬреНрдЮрд╛рдд рд╕рдорд╕реНрдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
рдЬреНрдЮрд╛рдд рдореБрджреНрджреЗ
рдкреБрд╕реНрддрдХрд╛рд▓рдп рдФрд░ ListViews рдХреЗ рд╕рд╛рде рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдореБрджреНрджрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЪреАрдЬреЗрдВ рддрдм рдареАрдХ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреА рд╣реИрдВ рдЬрдм рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдХрд╛рд░рдг рдЧрддрд┐рд╡рд┐рдзрд┐ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЬрдм рддрдХ рдЖрдк рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдирд╣реАрдВ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВ, рддрдм рддрдХ рдЖрдк рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдмрджрд▓ рджреЗрддреЗ рд╣реИрдВ (рдпрд╛ рдЖрдкрдХреА рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЗрд╡рд▓ рдкреЛрд░реНрдЯреНрд░реЗрдЯ / рд▓реИрдВрдбрд╕реНрдХреЗрдк рд╣реИ), рдореИрдВ рджреГрдврд╝рддрд╛ рд╕реЗ рдЖрдкрдХреЛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рд╕реНрдХреНрд░реЙрд▓ рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рдЕрдкрдиреА рд╕рд╛рдордЧреНрд░реА рд╣реЛрдиреЗ рддрдХ рдЪрд┐рдкрдХреЗ рд░рд╣реЗрдВ, рдЬрдм рддрдХ рдХрд┐ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдорд┐рд▓ рдЬрд╛рддрд╛ред
рдЗрд╕ рдХрдорд┐рдпрд╛рдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЬрд┐рд╕рд╕реЗ рджреЛрдиреЛрдВ рдХрдорд┐рдпрд╛рдВ рджреВрд░ рд╣реЛ рдЧрдИрдВ :)
рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рддреАрди рдлрд╛рдЗрд▓реЗрдВ рд╣реЛрддреА рд╣реИрдВ:
FadingActionBarActivity.java public class FadingActionBarActivity extends Activity { private static final String TAG = "FadingActionBarActivity"; private int mAlpha = 255; private Drawable mDrawable; private boolean isAlphaLocked; public void setActionBarBackgroundDrawable(Drawable drawable) { getActionBar().setBackgroundDrawable(drawable); mDrawable = drawable; if (mAlpha == 255) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) mAlpha = drawable.getAlpha(); } else { setActionBarAlpha(mAlpha); } } public Drawable getActionBarBackgroundDrawable() { return mDrawable; } public void setActionBarAlpha(int alpha) { if (mDrawable == null) { Log.w(TAG, "Set action bar background before setting alpha!"); return; } if (!isAlphaLocked) mDrawable.setAlpha(alpha); mAlpha = alpha; } public int getActionBarAlpha() { return mAlpha; } public void setActionBarAlphaLocked(boolean isLocked) { isAlphaLocked = isLocked; } }
рд╣реИрдбрд░рдлреНрд░реИрдЧрдореЗрдВрдЯ .java public class HeaderFragment extends Fragment { private static final String TAG = "HeaderFragment"; private FrameLayout mRoot; private View mContentOverlay; private View mHeader; private int mHeaderHeight; private int mCurrentHeaderHeight; private int mCurrentHeaderTranslateY; private Space mFakeHeader; private boolean mListViewEmpty; private OnHeaderScrollChangeListener mOnHeaderScrollChangeListener; public interface OnHeaderScrollChangeListener { public void onHeaderScrollChanged(float progress, int height, int scroll); } public void setOnHeaderScrollChangeListener(OnHeaderScrollChangeListener listener) { mOnHeaderScrollChangeListener = listener; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final Activity activity = getActivity(); mHeader = inflater.inflate(getHeaderResource(), container, false); mHeaderHeight = mHeader.getLayoutParams().height; mCurrentHeaderHeight = mHeaderHeight; mCurrentHeaderTranslateY = 0; onPrepareHeaderView(mHeader);
NotifyingScrollView .java public class NotifyingScrollView extends ScrollView {
рдФрд░
GitHub рдХреЗ рд╕рд╛рде рдПрдВрдбреНрд░реЙрдЗрдб рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдмрдирд╛рдИ рдЧрдИ рдПрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИред
рдХреЗ рдЙрдкрдпреЛрдЧ
рд╣реИрдбрд░рдлреНрд░реИрдЧрдореЗрдВрдЯ рдФрд░ рдлрд┐рдбрд┐рдВрдЧрдПрд╢рдирдмреЗрд░рдПрдХреНрдЯрд┐рд╡рд┐рдЯреА рджреЗрд╢реА рд╕рдордХрдХреНрд╖реЛрдВ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдм рдПрдВрдбреНрд░реЙрдЗрдб <4.0 рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИред
рд╣рдорд╛рд░рд╛ рдЖрд╡реЗрджрди рдКрдкрд░ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдореЗрдВ рдПрдХ рдбреЗрдореЛ рдХреА рддрд░рд╣ рд╣реЛрдЧрд╛ред рддреЛ, рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЧрддрд┐рд╡рд┐рдзрд┐:
public class MainActivity extends FadingActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
public class TestHeaderFragment extends HeaderFragment { @Override public void onAttach(Activity activity) { super.onAttach(activity);
рдЧрддрд┐рд╡рд┐рдзрд┐ рд╢реИрд▓реА рдореЗрдВ рдзреНрд╡рдЬ рдЬреЛрдбрд╝рдирд╛ рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИ:
<item name="android:windowActionBarOverlay">true</item>
ActionBar рдХреЗ рддрд╣рдд рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП
рдореИрдВ рдЕрдкрдиреЗ рдЪреЗрд╣рд░реЗ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЕрдкрдиреЗ рдХреЛрдб рдФрд░ рдЕрдВрдЧреНрд░реЗрдЬреА рдХреЗ рд▓рд┐рдП рдорд╛рдлреА рдорд╛рдВрдЧрддрд╛ рд╣реВрдВред :(