You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
187 lines
6.3 KiB
187 lines
6.3 KiB
/* |
|
* Copyright 2013 Chris Banes |
|
* |
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
* you may not use this file except in compliance with the License. |
|
* You may obtain a copy of the License at |
|
* |
|
* http://www.apache.org/licenses/LICENSE-2.0 |
|
* |
|
* Unless required by applicable law or agreed to in writing, software |
|
* distributed under the License is distributed on an "AS IS" BASIS, |
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
* See the License for the specific language governing permissions and |
|
* limitations under the License. |
|
*/ |
|
|
|
package uk.co.senab.actionbarpulltorefresh.extras.actionbarsherlock; |
|
|
|
import android.app.Activity; |
|
import android.content.Context; |
|
import android.content.res.TypedArray; |
|
import android.graphics.drawable.Drawable; |
|
import android.os.Build; |
|
import android.view.View; |
|
import android.view.animation.Animation; |
|
import android.view.animation.AnimationUtils; |
|
|
|
import uk.co.senab.actionbarpulltorefresh.library.DefaultHeaderTransformer; |
|
|
|
public class AbsDefaultHeaderTransformer extends DefaultHeaderTransformer { |
|
|
|
private Animation mHeaderInAnimation, mHeaderOutAnimation; |
|
|
|
@Override |
|
public void onViewCreated(Activity activity, View headerView) { |
|
super.onViewCreated(activity, headerView); |
|
|
|
// Create animations for use later |
|
mHeaderInAnimation = AnimationUtils.loadAnimation(activity, R.anim.fade_in); |
|
mHeaderOutAnimation = AnimationUtils.loadAnimation(activity, R.anim.fade_out); |
|
|
|
if (mHeaderOutAnimation != null || mHeaderInAnimation != null) { |
|
final AnimationCallback callback = new AnimationCallback(); |
|
if (mHeaderOutAnimation != null) { |
|
mHeaderOutAnimation.setAnimationListener(callback); |
|
} |
|
} |
|
} |
|
|
|
@Override |
|
protected Drawable getActionBarBackground(Context context) { |
|
// Super handles ICS+ anyway... |
|
if (Build.VERSION.SDK_INT >= super.getMinimumApiLevel()) { |
|
return super.getActionBarBackground(context); |
|
} |
|
|
|
// Get action bar style values... |
|
TypedArray abStyle = obtainStyledAttrsFromThemeAttr(context, R.attr.actionBarStyle, |
|
R.styleable.SherlockActionBar); |
|
try { |
|
return abStyle.getDrawable(R.styleable.SherlockActionBar_background); |
|
} finally { |
|
abStyle.recycle(); |
|
} |
|
} |
|
|
|
@Override |
|
protected int getActionBarSize(Context context) { |
|
// Super handles ICS+ anyway... |
|
if (Build.VERSION.SDK_INT >= super.getMinimumApiLevel()) { |
|
return super.getActionBarSize(context); |
|
} |
|
|
|
TypedArray values = context.obtainStyledAttributes(R.styleable.SherlockTheme); |
|
try { |
|
return values.getDimensionPixelSize(R.styleable.SherlockTheme_actionBarSize, 0); |
|
} finally { |
|
values.recycle(); |
|
} |
|
} |
|
|
|
@Override |
|
protected int getActionBarTitleStyle(Context context) { |
|
// Super handles ICS+ anyway... |
|
if (Build.VERSION.SDK_INT >= super.getMinimumApiLevel()) { |
|
return super.getActionBarTitleStyle(context); |
|
} |
|
|
|
// Get action bar style values... |
|
TypedArray abStyle = obtainStyledAttrsFromThemeAttr(context, R.attr.actionBarStyle, |
|
R.styleable.SherlockActionBar); |
|
try { |
|
return abStyle.getResourceId(R.styleable.SherlockActionBar_titleTextStyle, 0); |
|
} finally { |
|
abStyle.recycle(); |
|
} |
|
} |
|
|
|
@Override |
|
public boolean showHeaderView() { |
|
// Super handles ICS+ anyway... |
|
if (Build.VERSION.SDK_INT >= super.getMinimumApiLevel()) { |
|
return super.showHeaderView(); |
|
} |
|
|
|
final View headerView = getHeaderView(); |
|
final boolean changeVis = headerView != null && headerView.getVisibility() != View.VISIBLE; |
|
if (changeVis) { |
|
// Show Header |
|
if (mHeaderInAnimation != null) { |
|
// AnimationListener will call HeaderViewListener |
|
headerView.startAnimation(mHeaderInAnimation); |
|
} |
|
headerView.setVisibility(View.VISIBLE); |
|
} |
|
return changeVis; |
|
} |
|
|
|
@Override |
|
public boolean hideHeaderView() { |
|
// Super handles ICS+ anyway... |
|
if (Build.VERSION.SDK_INT >= super.getMinimumApiLevel()) { |
|
return super.hideHeaderView(); |
|
} |
|
|
|
final View headerView = getHeaderView(); |
|
final boolean changeVis = headerView != null && headerView.getVisibility() != View.GONE; |
|
if (changeVis) { |
|
// Hide Header |
|
if (mHeaderOutAnimation != null) { |
|
// AnimationListener will call HeaderTransformer and |
|
// HeaderViewListener |
|
headerView.startAnimation(mHeaderOutAnimation); |
|
} else { |
|
// As we're not animating, hide the header + call the header |
|
// transformer now |
|
headerView.setVisibility(View.GONE); |
|
onReset(); |
|
} |
|
} |
|
return changeVis; |
|
} |
|
|
|
@Override |
|
public void onRefreshMinimized() { |
|
// Super handles ICS+ anyway... |
|
if (Build.VERSION.SDK_INT >= super.getMinimumApiLevel()) { |
|
super.onRefreshMinimized(); |
|
return; |
|
} |
|
|
|
// Here we fade out most of the header, leaving just the progress bar |
|
View contentLayout = getHeaderView().findViewById(R.id.ptr_content); |
|
if (contentLayout != null) { |
|
contentLayout.startAnimation(AnimationUtils |
|
.loadAnimation(contentLayout.getContext(), R.anim.fade_out)); |
|
contentLayout.setVisibility(View.INVISIBLE); |
|
} |
|
} |
|
|
|
@Override |
|
protected int getMinimumApiLevel() { |
|
return Build.VERSION_CODES.ECLAIR_MR1; |
|
} |
|
|
|
class AnimationCallback implements Animation.AnimationListener { |
|
|
|
@Override |
|
public void onAnimationStart(Animation animation) { |
|
} |
|
|
|
@Override |
|
public void onAnimationEnd(Animation animation) { |
|
if (animation == mHeaderOutAnimation) { |
|
View headerView = getHeaderView(); |
|
if (headerView != null) { |
|
headerView.setVisibility(View.GONE); |
|
} |
|
onReset(); |
|
} |
|
} |
|
|
|
@Override |
|
public void onAnimationRepeat(Animation animation) { |
|
} |
|
} |
|
}
|
|
|