From f91ef956cf482ed4ce0885dc47794b783c20c415 Mon Sep 17 00:00:00 2001 From: wjc <1243177876@qq.com> Date: 星期三, 30 四月 2025 10:14:43 +0800 Subject: [PATCH] Merge branch '1.2.0' into 1.5.1_google --- app/src/main/java/com/hdl/photovoltaic/widget/refreshlayout/BGARefreshViewHolder.java | 345 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 345 insertions(+), 0 deletions(-) diff --git a/app/src/main/java/com/hdl/photovoltaic/widget/refreshlayout/BGARefreshViewHolder.java b/app/src/main/java/com/hdl/photovoltaic/widget/refreshlayout/BGARefreshViewHolder.java new file mode 100644 index 0000000..742e2be --- /dev/null +++ b/app/src/main/java/com/hdl/photovoltaic/widget/refreshlayout/BGARefreshViewHolder.java @@ -0,0 +1,345 @@ +/** + * Copyright 2015 bingoogolapple + * + * 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 com.hdl.photovoltaic.widget.refreshlayout; + +import android.content.Context; +import android.graphics.Color; +import android.graphics.drawable.AnimationDrawable; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.ColorRes; +import androidx.annotation.DrawableRes; + +import com.hdl.photovoltaic.R; + + +/** + * 浣滆��:鐜嬫旦 閭欢:bingoogolapple@gmail.com + * 鍒涘缓鏃堕棿:15/5/21 12:56 + * 鎻忚堪:缁ф壙璇ユ娊璞$被瀹炵幇鍝嶅簲鐨勬娊璞℃柟娉曪紝鍋氬嚭鍚勭涓嬫媺鍒锋柊鏁堟灉銆傚弬鑰傿GANormalRefreshViewHolder銆丅GAStickinessRefreshViewHolder銆丅GAMoocStyleRefreshViewHolder銆丅GAMeiTuanRefreshViewHolder + */ +public abstract class BGARefreshViewHolder { + /** + * 鎵嬫寚绉诲姩璺濈涓庝笅鎷夊埛鏂版帶浠秔addingTop绉诲姩璺濈鐨勬瘮鍊� + */ + private static final float PULL_DISTANCE_SCALE = 1.8f; + /** + * 鎵嬫寚绉诲姩璺濈涓庝笅鎷夊埛鏂版帶浠秔addingTop绉诲姩璺濈鐨勬瘮鍊硷紝榛樿1.8f + */ + private float mPullDistanceScale = PULL_DISTANCE_SCALE; + /** + * 涓嬫媺鍒锋柊鎺т欢paddingTop鐨勫脊绨ц窛绂讳笌涓嬫媺鍒锋柊鎺т欢楂樺害鐨勬瘮鍊� + */ + private static final float SPRING_DISTANCE_SCALE = 0.4f; + /** + * 涓嬫媺鍒锋柊鎺т欢paddingTop鐨勫脊绨ц窛绂讳笌涓嬫媺鍒锋柊鎺т欢楂樺害鐨勬瘮鍊硷紝榛樿0.4f + */ + private float mSpringDistanceScale = SPRING_DISTANCE_SCALE; + + protected Context mContext; + /** + * 涓嬫媺鍒锋柊涓婃媺鍔犺浇鏇村鎺т欢 + */ + protected BGARefreshLayout mRefreshLayout; + /** + * 涓嬫媺鍒锋柊鎺т欢 + */ + protected View mRefreshHeaderView; + /** + * 涓婃媺鍔犺浇鏇村鎺т欢 + */ + protected View mLoadMoreFooterView; + /** + * 搴曢儴鍔犺浇鏇村鎻愮ず鎺т欢 + */ + protected TextView mFooterStatusTv; + /** + * 搴曢儴鍔犺浇鏇村鑿婅姳鎺т欢 + */ + protected ImageView mFooterChrysanthemumIv; + /** + * 搴曢儴鍔犺浇鏇村鑿婅姳drawable + */ + protected AnimationDrawable mFooterChrysanthemumAd; + /** + * 姝e湪鍔犺浇鏇村鏃剁殑鏂囨湰 + */ + protected String mLodingMoreText = "鍔犺浇涓�..."; + /** + * 鏄惁寮�鍚姞杞芥洿澶氬姛鑳� + */ + private boolean mIsLoadingMoreEnabled = true; + /** + * 鏁翠釜鍔犺浇鏇村鎺т欢鐨勮儗鏅鑹茶祫婧恑d + */ + private int mLoadMoreBackgroundColorRes = -1; + /** + * 鏁翠釜鍔犺浇鏇村鎺т欢鐨勮儗鏅痙rawable璧勬簮id + */ + private int mLoadMoreBackgroundDrawableRes = -1; + /** + * 涓嬫媺鍒锋柊鎺т欢鐨勮儗鏅鑹茶祫婧恑d + */ + protected int mRefreshViewBackgroundColorRes = -1; + /** + * 涓嬫媺鍒锋柊鎺т欢鐨勮儗鏅痙rawable璧勬簮id + */ + protected int mRefreshViewBackgroundDrawableRes = -1; + /** + * 澶撮儴鎺т欢绉诲姩鍔ㄧ敾鏃跺父 + */ + private int mTopAnimDuration = 500; + + /** + * @param context + * @param isLoadingMoreEnabled 涓婃媺鍔犺浇鏇村鏄惁鍙敤 + */ + public BGARefreshViewHolder(Context context, boolean isLoadingMoreEnabled) { + mContext = context; + mIsLoadingMoreEnabled = isLoadingMoreEnabled; + } + + /** + * 璁剧疆姝e湪鍔犺浇鏇村鏃剁殑鏂囨湰 + * + * @param loadingMoreText + */ + public void setLoadingMoreText(String loadingMoreText) { + mLodingMoreText = loadingMoreText; + } + + /** + * 璁剧疆鏁翠釜鍔犺浇鏇村鎺т欢鐨勮儗鏅鑹茶祫婧恑d + * + * @param loadMoreBackgroundColorRes + */ + public void setLoadMoreBackgroundColorRes(@ColorRes int loadMoreBackgroundColorRes) { + mLoadMoreBackgroundColorRes = loadMoreBackgroundColorRes; + } + + /** + * 璁剧疆鏁翠釜鍔犺浇鏇村鎺т欢鐨勮儗鏅痙rawable璧勬簮id + * + * @param loadMoreBackgroundDrawableRes + */ + public void setLoadMoreBackgroundDrawableRes(@DrawableRes int loadMoreBackgroundDrawableRes) { + mLoadMoreBackgroundDrawableRes = loadMoreBackgroundDrawableRes; + } + + /** + * 璁剧疆涓嬫媺鍒锋柊鎺т欢鐨勮儗鏅鑹茶祫婧恑d + * + * @param refreshViewBackgroundColorRes + */ + public void setRefreshViewBackgroundColorRes(@ColorRes int refreshViewBackgroundColorRes) { + mRefreshViewBackgroundColorRes = refreshViewBackgroundColorRes; + } + + /** + * 璁剧疆涓嬫媺鍒锋柊鎺т欢鐨勮儗鏅痙rawable璧勬簮id + * + * @param refreshViewBackgroundDrawableRes + */ + public void setRefreshViewBackgroundDrawableRes(@DrawableRes int refreshViewBackgroundDrawableRes) { + mRefreshViewBackgroundDrawableRes = refreshViewBackgroundDrawableRes; + } + + /** + * 鑾峰彇椤堕儴鏈弧瓒充笅鎷夊埛鏂版潯浠舵椂鍥炲脊鍒板垵濮嬬姸鎬併�佹弧瓒冲埛鏂版潯浠舵椂鍥炲脊鍒版鍦ㄥ埛鏂扮姸鎬併�佸埛鏂板畬姣曞悗鍥炲脊鍒板垵濮嬬姸鎬佺殑鍔ㄧ敾鏃堕棿锛岄粯璁や负500姣 + * + * @return + */ + public int getTopAnimDuration() { + return mTopAnimDuration; + } + + /** + * 璁剧疆椤堕儴鏈弧瓒充笅鎷夊埛鏂版潯浠舵椂鍥炲脊鍒板垵濮嬬姸鎬併�佹弧瓒冲埛鏂版潯浠舵椂鍥炲脊鍒版鍦ㄥ埛鏂扮姸鎬併�佸埛鏂板畬姣曞悗鍥炲脊鍒板垵濮嬬姸鎬佺殑鍔ㄧ敾鏃堕棿锛岄粯璁や负300姣 + * + * @param topAnimDuration + */ + public void setTopAnimDuration(int topAnimDuration) { + mTopAnimDuration = topAnimDuration; + } + + /** + * 鑾峰彇涓婃媺鍔犺浇鏇村鎺т欢锛屽鏋滀笉鍠滄杩欑涓婃媺鍒锋柊椋庢牸鍙噸鍐欒鏂规硶瀹炵幇鑷畾涔塋oadMoreFooterView + * + * @return + */ + public View getLoadMoreFooterView() { + if (!mIsLoadingMoreEnabled) { + return null; + } + if (mLoadMoreFooterView == null) { + mLoadMoreFooterView = View.inflate(mContext, R.layout.loading_more, null); + mLoadMoreFooterView.setBackgroundColor(Color.TRANSPARENT); + if (mLoadMoreBackgroundColorRes != -1) { + mLoadMoreFooterView.setBackgroundResource(mLoadMoreBackgroundColorRes); + } + if (mLoadMoreBackgroundDrawableRes != -1) { + mLoadMoreFooterView.setBackgroundResource(mLoadMoreBackgroundDrawableRes); + } + mFooterStatusTv = (TextView) mLoadMoreFooterView.findViewById(R.id.load_more_content_tv); + mFooterChrysanthemumIv = (ImageView) mLoadMoreFooterView.findViewById(R.id.load_more_iv); + mFooterChrysanthemumIv.setBackground(mContext.getDrawable(R.drawable.progress_small)); + mFooterChrysanthemumAd = (AnimationDrawable) mFooterChrysanthemumIv.getDrawable(); + mFooterStatusTv.setText(mLodingMoreText); + } + return mLoadMoreFooterView; + } + + /** + * 鑾峰彇澶撮儴涓嬫媺鍒锋柊鎺т欢 + * + * @return + */ + public abstract View getRefreshHeaderView(); + + /** + * 涓嬫媺鍒锋柊鎺т欢鍙鏃讹紝澶勭悊涓婁笅鎷夎繘搴� + * + * @param scale 涓嬫媺杩囩▼0 鍒� 1锛屽洖寮硅繃绋�1 鍒� 0锛屾病鏈夊姞涓婂脊绨ц窛绂荤Щ鍔ㄦ椂鐨勬瘮渚� + * @param moveYDistance 鏁翠釜涓嬫媺鍒锋柊鎺т欢paddingTop鍙樺寲鐨勫�硷紝濡傛灉鏈夊脊绨ц窛绂伙紝浼氬ぇ浜庢暣涓笅鎷夊埛鏂版帶浠剁殑楂樺害 + */ + public abstract void handleScale(float scale, int moveYDistance); + + /** + * 杩涘叆鍒版湭澶勭悊涓嬫媺鍒锋柊鐘舵�� + */ + public abstract void changeToIdle(); + + /** + * 杩涘叆涓嬫媺鐘舵�� + */ + public abstract void changeToPullDown(); + + /** + * 杩涘叆閲婃斁鍒锋柊鐘舵�� + */ + public abstract void changeToReleaseRefresh(); + + /** + * 杩涘叆姝e湪鍒锋柊鐘舵�� + */ + public abstract void changeToRefreshing(); + + /** + * 缁撴潫涓嬫媺鍒锋柊 + */ + public abstract void onEndRefreshing(); + + /** + * 鎵嬫寚绉诲姩璺濈涓庝笅鎷夊埛鏂版帶浠秔addingTop绉诲姩璺濈鐨勬瘮鍊� + * + * @return + */ + public float getPaddingTopScale() { + return mPullDistanceScale; + } + + /** + * 璁剧疆鎵嬫寚绉诲姩璺濈涓庝笅鎷夊埛鏂版帶浠秔addingTop绉诲姩璺濈鐨勬瘮鍊� + * + * @param pullDistanceScale + */ + public void setPullDistanceScale(float pullDistanceScale) { + mPullDistanceScale = pullDistanceScale; + } + + /** + * 涓嬫媺鍒锋柊鎺т欢paddingTop鐨勫脊绨ц窛绂讳笌涓嬫媺鍒锋柊鎺т欢楂樺害鐨勬瘮鍊� + * + * @return + */ + public float getSpringDistanceScale() { + return mSpringDistanceScale; + } + + /** + * 璁剧疆涓嬫媺鍒锋柊鎺т欢paddingTop鐨勫脊绨ц窛绂讳笌涓嬫媺鍒锋柊鎺т欢楂樺害鐨勬瘮鍊硷紝涓嶈兘灏忎簬0锛屽鏋滃埛鏂版帶浠舵瘮杈冮珮锛屽缓璁皢璇ュ�艰缃皬涓�浜� + * + * @param springDistanceScale + */ + public void setSpringDistanceScale(float springDistanceScale) { + if (springDistanceScale < 0) { + throw new RuntimeException("涓嬫媺鍒锋柊鎺т欢paddingTop鐨勫脊绨ц窛绂讳笌涓嬫媺鍒锋柊鎺т欢楂樺害鐨勬瘮鍊約pringDistanceScale涓嶈兘灏忎簬0"); + } + mSpringDistanceScale = springDistanceScale; + } + + /** + * 鏄浜庤兘澶熻繘鍏ュ埛鏂扮姸鎬� + * + * @return + */ + public boolean canChangeToRefreshingStatus() { + return false; + } + + /** + * 杩涘叆鍔犺浇鏇村鐘舵�� + */ + public void changeToLoadingMore() { + if (mIsLoadingMoreEnabled && mFooterChrysanthemumAd != null) { + mFooterChrysanthemumAd.start(); + } + } + + /** + * 缁撴潫涓婃媺鍔犺浇鏇村 + */ + public void onEndLoadingMore() { + if (mIsLoadingMoreEnabled && mFooterChrysanthemumAd != null) { + mFooterChrysanthemumAd.stop(); + } + } + + /** + * 鑾峰彇涓嬫媺鍒锋柊鎺т欢鐨勯珮搴︼紝濡傛灉鍒濆鍖栨椂鐨勯珮搴﹀拰鏈�鍚庡睍寮�鐨勬渶澶ч珮搴︿笉涓�鑷达紝闇�閲嶅啓璇ユ柟娉曡繑鍥炴渶澶ч珮搴� + * + * @return + */ + public int getRefreshHeaderViewHeight() { + if (mRefreshHeaderView != null) { + // 娴嬮噺涓嬫媺鍒锋柊鎺т欢鐨勯珮搴� + mRefreshHeaderView.measure(0, 0); + return mRefreshHeaderView.getMeasuredHeight(); + } + return 0; + } + + /** + * 鏀瑰彉鏁翠釜涓嬫媺鍒锋柊澶撮儴鎺т欢绉诲姩涓�瀹氱殑璺濈锛堝甫鍔ㄧ敾锛夛紝鑷畾涔夊埛鏂版帶浠惰繘鍏ュ埛鏂扮姸鎬佸墠鍚庣殑楂樺害鏈夊彉鍖栨椂鍙互浣跨敤璇ユ柟娉曪紙鍙傝�傿GAStickinessRefreshView锛� + * + * @param distance + */ + public void startChangeWholeHeaderViewPaddingTop(int distance) { + mRefreshLayout.startChangeWholeHeaderViewPaddingTop(distance); + } + + /** + * 璁剧疆涓嬫媺鍒锋柊涓婃媺鍔犺浇鏇村鎺т欢锛岃鏂规硶鏄缃瓸GARefreshViewHolder缁橞GARefreshLayout鏃剁敱BGARefreshLayout璋冪敤 + * + * @param refreshLayout + */ + public void setRefreshLayout(BGARefreshLayout refreshLayout) { + mRefreshLayout = refreshLayout; + } + +} \ No newline at end of file -- Gitblit v1.8.0