diff --git a/app/build.gradle b/app/build.gradle index 3e1a0dff7f..38ebbd488a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -188,6 +188,7 @@ dependencies { compile libs.eventbus apt libs.eventbusApt + compile project(':libraries:LGLibrary') compile project(':libraries:MiPush') compile project(':libraries:MTA') compile project(':libraries:QQShare') diff --git a/app/src/main/java/com/gh/base/BaseAppCompatToolBarActivity.java b/app/src/main/java/com/gh/base/BaseAppCompatToolBarActivity.java index b9cc082191..7eafe7edbf 100644 --- a/app/src/main/java/com/gh/base/BaseAppCompatToolBarActivity.java +++ b/app/src/main/java/com/gh/base/BaseAppCompatToolBarActivity.java @@ -23,7 +23,7 @@ public abstract class BaseAppCompatToolBarActivity extends BaseAppCompatActivity private SystemBarTintManager mTintManager; // TODO 获取沉浸栏管理,要进行版本判断或者判断是否为空 - protected SystemBarTintManager getTintManager() { + public SystemBarTintManager getTintManager() { return mTintManager; } diff --git a/app/src/main/java/com/gh/base/BaseFragment.java b/app/src/main/java/com/gh/base/fragment/BaseFragment.java similarity index 85% rename from app/src/main/java/com/gh/base/BaseFragment.java rename to app/src/main/java/com/gh/base/fragment/BaseFragment.java index 99d1f5f07b..9002fff95a 100644 --- a/app/src/main/java/com/gh/base/BaseFragment.java +++ b/app/src/main/java/com/gh/base/fragment/BaseFragment.java @@ -1,6 +1,7 @@ -package com.gh.base; +package com.gh.base.fragment; import android.os.Bundle; +import android.support.annotation.LayoutRes; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.view.LayoutInflater; @@ -8,6 +9,7 @@ import android.view.View; import android.view.ViewGroup; import android.widget.Toast; +import com.gh.base.OnRequestCallBackListener; import com.gh.common.util.EntranceUtils; import com.gh.common.util.RuntimeUtils; import com.gh.gamecenter.eventbus.EBMiPush; @@ -22,7 +24,7 @@ import butterknife.ButterKnife; * Created by LGT on 2016/9/4. * Fragment 基类 */ -public abstract class BaseFragment extends Fragment implements OnRequestCallBackListener { +public abstract class BaseFragment extends Fragment implements OnRequestCallBackListener, View.OnClickListener { // TODO private view protected View view; @@ -31,8 +33,23 @@ public abstract class BaseFragment extends Fragment implements OnRequestCallBack protected String mEntrance; + @LayoutRes protected abstract int getLayoutId(); + /** + * 责任链,谁处理了就返回true,否则返回super.handleOnClick(View view) + * + * @return + */ + protected boolean handleOnClick(View view) { + return true; + } + + @Override + public void onClick(View v) { + handleOnClick(v); + } + protected void initView(View view) { } diff --git a/app/src/main/java/com/gh/base/fragment/BaseFragment_ViewPager.java b/app/src/main/java/com/gh/base/fragment/BaseFragment_ViewPager.java new file mode 100755 index 0000000000..3417aa45b3 --- /dev/null +++ b/app/src/main/java/com/gh/base/fragment/BaseFragment_ViewPager.java @@ -0,0 +1,109 @@ +/** + * project: OPlay + *

+ *

+ * ======================================================================== + * amend date amend user amend reason + * 2013-3-6 CsHeng + */ + +package com.gh.base.fragment; + +import android.os.Bundle; +import android.support.annotation.IdRes; +import android.support.annotation.LayoutRes; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; +import android.support.v4.view.PagerAdapter; +import android.support.v4.view.ViewPager; +import android.view.View; + +import com.lightgame.adapter.BaseFragmentPagerAdapter; +import com.lightgame.view.DoubleTapTextView; + +import java.util.ArrayList; +import java.util.List; + +/** + * ViewPager 配合RadioGroup实现双切换
+ * 记得自己控制onCreateView返回和radioGroup里面radiobutton个数,Viewpager的布局
+ * + * @author CsHeng + * @date 2013-3-6 + */ +public abstract class BaseFragment_ViewPager extends BaseFragment implements DoubleTapTextView.OnDoubleTapListener { + + private static final String ARGS_INDEX = "index"; + protected int mCheckedIndex = 0; + protected PagerAdapter mAdapter; + protected List mFragmentsList; + protected ViewPager mViewPager; + + @LayoutRes + protected abstract int getLayoutId(); + + @IdRes + protected abstract int getViewPagerId(); + + protected abstract void initFragmentList(List fragments); + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mFragmentsList = new ArrayList<>(); + initFragmentList(mFragmentsList); + mAdapter = BaseFragmentPagerAdapter.newInstance(getChildFragmentManager(), mFragmentsList); + final Bundle args = getArguments(); + if (args != null) { + mCheckedIndex = args.getInt(ARGS_INDEX); + } + } + + @Override + public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + mViewPager = (ViewPager) view.findViewById(getViewPagerId()); + mViewPager.setOffscreenPageLimit(mFragmentsList.size()); + mViewPager.setAdapter(mAdapter); + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + if (mCheckedIndex < mFragmentsList.size()) { + mViewPager.setCurrentItem(mCheckedIndex, false); + } + } + + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + if (getArguments() != null) { + getArguments().putInt(ARGS_INDEX, mCheckedIndex); + } + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + if (mViewPager != null) { + mViewPager.setAdapter(null); + } + } + + @Override + public void onDestroy() { + super.onDestroy(); + if (mFragmentsList != null) { + mFragmentsList.clear(); + } + } + + @Override + public boolean onDoubleTap() { + final Fragment fragment = mFragmentsList.get(mViewPager.getCurrentItem()); + return fragment instanceof DoubleTapTextView.OnDoubleTapListener && ((DoubleTapTextView.OnDoubleTapListener) + fragment).onDoubleTap(); + } + +} diff --git a/app/src/main/java/com/gh/base/fragment/BaseFragment_ViewPager_Checkable.java b/app/src/main/java/com/gh/base/fragment/BaseFragment_ViewPager_Checkable.java new file mode 100755 index 0000000000..8e0be2c8b7 --- /dev/null +++ b/app/src/main/java/com/gh/base/fragment/BaseFragment_ViewPager_Checkable.java @@ -0,0 +1,105 @@ +/** + * project: OPlay + *

+ *

+ * ======================================================================== + * amend date amend user amend reason + * 2013-3-6 CsHeng + */ + +package com.gh.base.fragment; + +import android.os.Bundle; +import android.support.annotation.IdRes; +import android.support.annotation.Nullable; +import android.support.v4.view.ViewPager; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Checkable; + + +/** + * ViewPager 配合ViewGroup Checkable实现双切换
+ * 记得自己控制onCreateView返回和ViewGroup里面Checkable个数,ViewPager的布局
+ * + * @author CsHeng + * @date 2013-3-6 + * @update 2014-09-29 + */ +public abstract class BaseFragment_ViewPager_Checkable extends BaseFragment_ViewPager implements + ViewPager.OnPageChangeListener { + + protected ViewGroup mCheckableGroup; + + @IdRes + protected abstract int getCheckableGroupId(); + + @Override + public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + mCheckableGroup = (ViewGroup) view.findViewById(getCheckableGroupId()); + for (int i = 0, size = mCheckableGroup.getChildCount(); i < size; i++) { + mCheckableGroup.getChildAt(i).setOnClickListener(this); + } + mViewPager.addOnPageChangeListener(this); + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + mViewPager.removeOnPageChangeListener(this); + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + checkIndex(mCheckedIndex); + } + + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + + } + + @Override + public void onPageSelected(int index) { + onPageChanged(index); + } + + @Override + public void onPageScrollStateChanged(int state) { + + } + + @Override + protected boolean handleOnClick(View view) { + final int toCheck = mCheckableGroup.indexOfChild(view); + if (toCheck != -1) { + mViewPager.setCurrentItem(toCheck, false); + return true; + } + return super.handleOnClick(view); + } + + protected void checkIndex(int index) { + final int childCount = mCheckableGroup.getChildCount(); + if (index < childCount && mCheckedIndex < childCount) { + final View toChecked = mCheckableGroup.getChildAt(index); + if (toChecked instanceof Checkable) { + ((Checkable) toChecked).setChecked(true); + } + if (index != mCheckedIndex) { + final View checkedChild = mCheckableGroup.getChildAt(mCheckedIndex); + if (checkedChild instanceof Checkable) { + ((Checkable) checkedChild).setChecked(false); + } + } + mCheckedIndex = index; + } + } + + protected void onPageChanged(int index) { + checkIndex(index); + } + +} diff --git a/app/src/main/java/com/gh/common/util/PackageUtils.java b/app/src/main/java/com/gh/common/util/PackageUtils.java index aca1629360..73dc01c5f5 100644 --- a/app/src/main/java/com/gh/common/util/PackageUtils.java +++ b/app/src/main/java/com/gh/common/util/PackageUtils.java @@ -91,12 +91,10 @@ public class PackageUtils { private static String[] parseSignature(byte[] signature) { String[] ret = null; try { - CertificateFactory certFactory = CertificateFactory - .getInstance("X.509"); - X509Certificate cert = (X509Certificate) certFactory - .generateCertificate(new ByteArrayInputStream(signature)); - ret = new String[]{cert.getPublicKey().toString(), - cert.getSerialNumber().toString()}; + CertificateFactory certFactory = CertificateFactory.getInstance("X.509"); + X509Certificate cert = (X509Certificate) certFactory.generateCertificate( + new ByteArrayInputStream(signature)); + ret = new String[]{cert.getPublicKey().toString(), cert.getSerialNumber().toString()}; } catch (CertificateException e) { e.printStackTrace(); } @@ -159,8 +157,8 @@ public class PackageUtils { */ public static Intent getUninstallIntent(Context context, String path) { Intent uninstallIntent = new Intent(); - uninstallIntent.setAction("android.intent.action.DELETE"); - uninstallIntent.addCategory("android.intent.category.DEFAULT"); + uninstallIntent.setAction(Intent.ACTION_DELETE); + uninstallIntent.addCategory(Intent.CATEGORY_DEFAULT); String packageName = getPackageNameByPath(context, path); uninstallIntent.setData(Uri.parse("package:" + packageName)); InstallUtils.getInstance(context).addUninstall(packageName); @@ -172,8 +170,7 @@ public class PackageUtils { */ public static String getPackageNameByPath(Context context, String path) { PackageManager packageManager = context.getApplicationContext().getPackageManager(); - PackageInfo info = packageManager.getPackageArchiveInfo(path, - PackageManager.GET_ACTIVITIES); + PackageInfo info = packageManager.getPackageArchiveInfo(path, PackageManager.GET_ACTIVITIES); if (info != null) { ApplicationInfo appInfo = info.applicationInfo; return appInfo.packageName; diff --git a/app/src/main/java/com/gh/common/view/ScaleAutoScrollViewPager.java b/app/src/main/java/com/gh/common/view/ScaleAutoScrollViewPager.java new file mode 100644 index 0000000000..bb934f13d5 --- /dev/null +++ b/app/src/main/java/com/gh/common/view/ScaleAutoScrollViewPager.java @@ -0,0 +1,49 @@ +package com.gh.common.view; + +import android.content.Context; +import android.content.res.TypedArray; +import android.util.AttributeSet; + +import com.gh.gamecenter.R; + +import cn.trinea.android.view.autoscrollviewpager.AutoScrollViewPager; + +/** + * @author CsHeng + * @Date 17/06/2017 + * @Time 12:24 PM + */ + +public class ScaleAutoScrollViewPager extends AutoScrollViewPager { + + private boolean mMeasureByHeight = false; // default width + private float mScale = 1f;// default square + + public ScaleAutoScrollViewPager(Context context) { + super(context); + } + + public ScaleAutoScrollViewPager(Context context, AttributeSet set) { + super(context, set); + TypedArray a = context.obtainStyledAttributes(set, R.styleable.ScaleView); + int enumV = a.getInt(R.styleable.ScaleView_measureBy, 0); + mScale = a.getFloat(R.styleable.ScaleView_fractionValue, mScale); + if (enumV != 0) { + mMeasureByHeight = true; + } + a.recycle(); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + int width = MeasureSpec.getSize(widthMeasureSpec); + int height = MeasureSpec.getSize(heightMeasureSpec); + if (mMeasureByHeight) { + setMeasuredDimension((int) (height * mScale), height); + } else { + setMeasuredDimension(width, (int) (width * mScale)); + } + + } +} diff --git a/app/src/main/java/com/gh/common/view/ScaleSimpleDraweeView.java b/app/src/main/java/com/gh/common/view/ScaleSimpleDraweeView.java new file mode 100644 index 0000000000..569dfd766f --- /dev/null +++ b/app/src/main/java/com/gh/common/view/ScaleSimpleDraweeView.java @@ -0,0 +1,63 @@ +package com.gh.common.view; + +import android.content.Context; +import android.content.res.TypedArray; +import android.util.AttributeSet; + +import com.facebook.drawee.view.SimpleDraweeView; +import com.gh.gamecenter.R; + +/** + * @author CsHeng + * @Date 17/06/2017 + * @Time 2:46 PM + */ + +public class ScaleSimpleDraweeView extends SimpleDraweeView { + + private boolean mMeasureByHeight = false; // default width + + private float mFraction = 1f;// default square + + public ScaleSimpleDraweeView(Context context) { + super(context); + } + + public ScaleSimpleDraweeView(Context context, AttributeSet attrs) { + super(context, attrs); + init(context, attrs); + } + + public ScaleSimpleDraweeView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + init(context, attrs); + } + + public ScaleSimpleDraweeView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + init(context, attrs); + } + + public void init(Context context, AttributeSet attrs) { + TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ScaleView); + int enumV = a.getInt(R.styleable.ScaleView_measureBy, 0); + mFraction = a.getFloat(R.styleable.ScaleView_fractionValue, mFraction); + if (enumV != 0) { + mMeasureByHeight = true; + } + a.recycle(); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + int width = MeasureSpec.getSize(widthMeasureSpec); + int height = MeasureSpec.getSize(heightMeasureSpec); + if (mMeasureByHeight) { + setMeasuredDimension((int) (height * mFraction), height); + } else { + setMeasuredDimension(width, (int) (width * mFraction)); + } + } + + +} diff --git a/app/src/main/java/com/gh/gamecenter/GameDetailActivity.java b/app/src/main/java/com/gh/gamecenter/GameDetailActivity.java index e975db4e0f..6a5b336dbe 100644 --- a/app/src/main/java/com/gh/gamecenter/GameDetailActivity.java +++ b/app/src/main/java/com/gh/gamecenter/GameDetailActivity.java @@ -37,7 +37,7 @@ import com.gh.common.util.PackageUtils; import com.gh.common.util.ShareUtils; import com.gh.common.util.Utils; import com.gh.common.view.DownloadDialog; -import com.gh.common.view.NoScrollableViewPager; +import com.lightgame.view.NoScrollableViewPager; import com.gh.download.DataWatcher; import com.gh.download.DownloadEntity; import com.gh.download.DownloadManager; diff --git a/app/src/main/java/com/gh/gamecenter/LibaoActivity.java b/app/src/main/java/com/gh/gamecenter/LibaoActivity.java index 8392e676ef..d62e3dc6c7 100644 --- a/app/src/main/java/com/gh/gamecenter/LibaoActivity.java +++ b/app/src/main/java/com/gh/gamecenter/LibaoActivity.java @@ -11,7 +11,7 @@ import android.widget.TextView; import com.gh.base.BaseActivity; import com.gh.common.util.DisplayUtils; -import com.gh.common.view.NoScrollableViewPager; +import com.lightgame.view.NoScrollableViewPager; import com.gh.base.adapter.FragmentAdapter; import com.gh.gamecenter.eventbus.EBReuse; import com.gh.gamecenter.eventbus.EBUISwitch; diff --git a/app/src/main/java/com/gh/gamecenter/MainActivity.java b/app/src/main/java/com/gh/gamecenter/MainActivity.java index b7e1c65fa8..b425eb8b44 100644 --- a/app/src/main/java/com/gh/gamecenter/MainActivity.java +++ b/app/src/main/java/com/gh/gamecenter/MainActivity.java @@ -5,29 +5,20 @@ import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; -import android.graphics.Color; import android.net.Uri; -import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.SystemClock; import android.provider.Settings; import android.support.annotation.NonNull; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentTransaction; import android.support.v4.util.ArrayMap; import android.text.Html; import android.text.Spanned; import android.text.TextUtils; import android.view.KeyEvent; -import android.view.View; -import android.view.View.OnClickListener; -import android.widget.CheckedTextView; -import android.widget.ImageView; import com.gh.base.AppController; import com.gh.base.BaseActivity; -import com.gh.base.SearchBarHint; import com.gh.common.constant.Config; import com.gh.common.util.ClassUtils; import com.gh.common.util.DataCollectionUtils; @@ -47,37 +38,27 @@ import com.gh.download.DataWatcher; import com.gh.download.DownloadEntity; import com.gh.download.DownloadManager; import com.gh.download.DownloadStatus; -import com.gh.gamecenter.db.KeFuMarkReadDao; -import com.gh.gamecenter.db.MessageMarkReadDao; import com.gh.gamecenter.db.info.ConcernInfo; import com.gh.gamecenter.db.info.GameInfo; -import com.gh.gamecenter.db.info.MessageMarkReadInfo; import com.gh.gamecenter.entity.ApkEntity; import com.gh.gamecenter.entity.GameDigestEntity; import com.gh.gamecenter.entity.GameEntity; import com.gh.gamecenter.entity.GameUpdateEntity; -import com.gh.gamecenter.entity.MessageUnreadEntity; import com.gh.gamecenter.eventbus.EBDownloadStatus; import com.gh.gamecenter.eventbus.EBPackage; -import com.gh.gamecenter.eventbus.EBReuse; import com.gh.gamecenter.eventbus.EBShowDialog; -import com.gh.gamecenter.eventbus.EBSkip; import com.gh.gamecenter.eventbus.EBUISwitch; -import com.gh.gamecenter.fragment.GameFragment; +import com.gh.gamecenter.fragment.MainFragment; import com.gh.gamecenter.manager.ConcernManager; import com.gh.gamecenter.manager.DataCollectionManager; import com.gh.gamecenter.manager.FilterManager; import com.gh.gamecenter.manager.GameManager; import com.gh.gamecenter.manager.PackageManager; import com.gh.gamecenter.manager.UpdateManager; -import com.gh.gamecenter.message.MessageFragment; -import com.gh.gamecenter.news.NewsFragment; -import com.gh.gamecenter.personal.PersonalFragment; import com.gh.gamecenter.retrofit.JSONObjectResponse; import com.gh.gamecenter.retrofit.ObservableUtil; import com.gh.gamecenter.retrofit.Response; import com.gh.gamecenter.retrofit.RetrofitManager; -import com.readystatesoftware.systembartint.SystemBarTintManager; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; @@ -95,7 +76,6 @@ import java.util.concurrent.CountDownLatch; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; -import butterknife.BindView; import okhttp3.MediaType; import okhttp3.RequestBody; import okhttp3.ResponseBody; @@ -109,40 +89,13 @@ import rx.schedulers.Schedulers; /** * 项目的主Activity,3个Fragment都嵌入在这里。 */ -public class MainActivity extends BaseActivity implements OnClickListener { +public class MainActivity extends BaseActivity { - public static final int INDEX_GAME = 0; - public static final int INDEX_NEWS = 1; - public static final int INDEX_MESSAGE = 2; - public static final int INDEX_PERSONAL = 3; public final static String EB_MAINACTIVITY_TAG = "MainActivity"; public final static String EB_SKIP_GAMEFRAGMENT = "GameFragment"; - @BindView(R.id.main_iv_game) - ImageView ivGame; - @BindView(R.id.main_iv_news) - ImageView ivNews; - @BindView(R.id.main_iv_message) - ImageView ivMessage; - @BindView(R.id.main_iv_personal) - ImageView ivPersonal; - @BindView(R.id.main_tv_game) - CheckedTextView tvGame; - @BindView(R.id.main_tv_news) - CheckedTextView tvNews; - @BindView(R.id.main_tv_message) - CheckedTextView tvMessage; - @BindView(R.id.main_tv_personal) - CheckedTextView tvPersonal; - @BindView(R.id.main_iv_message_hint) - View mMessageHint; - private NewsFragment newsFragment; - private MessageFragment messageFragment; - private PersonalFragment personalFragment; - private GameFragment gameFragment; private SharedPreferences sp; private ConcernManager concernManager; - private ArrayList mSearchHintLint; - private int currentTab; + private boolean isSkipped; Runnable skipRun = new Runnable() { @Override @@ -374,13 +327,12 @@ public class MainActivity extends BaseActivity implements OnClickListener { @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); - outState.putInt("currentTab", currentTab); outState.putBoolean("isSkipped", isSkipped); } @Override protected int getLayoutId() { - return R.layout.activity_main; + return R.layout.layout_wrapper_activity; } @Override @@ -681,19 +633,18 @@ public class MainActivity extends BaseActivity implements OnClickListener { isSkipped = false; - initViews(); +// initViews(); if (savedInstanceState != null) { - currentTab = savedInstanceState.getInt("currentTab"); +// currentTab = savedInstanceState.getInt("currentTab"); isSkipped = savedInstanceState.getBoolean("isSkipped"); - } else { - currentTab = 0; +// } else { +// currentTab = 0; } - setTabSelection(currentTab); + + replaceFragment(new MainFragment()); concernManager = new ConcernManager(getApplicationContext()); - getSearchHints(); - if (!isNewFirstLaunch && sp.getBoolean("autoupdate", true)) { // 检查助手更新 UpdateManager.getInstance(this).checkUpdate(true, null); @@ -745,9 +696,6 @@ public class MainActivity extends BaseActivity implements OnClickListener { getSuggestionType(); - checkMarkRead(); // 检查是否有记录已读消息 - - checkMessageUnread(true); // 检查是否有未读消息 } @Override @@ -762,123 +710,6 @@ public class MainActivity extends BaseActivity implements OnClickListener { handler.removeCallbacksAndMessages(null); } - private void checkMessageUnread(boolean isCheck) { - TokenUtils.getToken(this, isCheck) - .flatMap(new Func1>() { - @Override - public Observable call(String token) { - return RetrofitManager.getMessage().getMessageUnread(token); - } - }) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Response() { - @Override - public void onResponse(MessageUnreadEntity response) { - super.onResponse(response); - if (response != null && response.getKefuList() != null && response.getKefuList().size() > 0) { - KeFuMarkReadDao dao = new KeFuMarkReadDao(MainActivity.this); - for (int i = 0; i < response.getKefuList().size(); i++) { - if (dao.isMarkRead(response.getKefuList().get(i))) { - response.getKefuList().remove(i); - i--; - } - } - - if (response.getKefuList() != null && response.getKefuList().size() > 0) { - mMessageHint.setVisibility(View.VISIBLE); - } - - } - - if (response != null && response.getComment() > 0) { - mMessageHint.setVisibility(View.VISIBLE); - } - } - - @Override - public void onFailure(HttpException e) { - if (e != null && e.code() == 401) { - checkMessageUnread(false); - } - } - }); - } - - private void checkMarkRead() { - MessageMarkReadDao readDao = new MessageMarkReadDao(MainActivity.this); - List readInfos = readDao.getAll(); - if (readInfos == null || readInfos.size() == 0) { - return; - } - - MessageMarkReadInfo readInfo = readInfos.get(0); - HashMap kefuIds = readInfo.getKefuIds(); - HashMap noticeIds = readInfo.getNoticeIds(); - - if (kefuIds != null && kefuIds.size() > 0) { - Utils.log("======提交已读客服消息"); - JSONArray array = new JSONArray(); - for (String s : kefuIds.keySet()) { - array.put(s); - } - Utils.log("======客服id::" + array.toString()); - RequestBody body = RequestBody.create(MediaType.parse("application/json"), array.toString()); - postMarkRead("kefu", true, body, readDao); - } - - if (noticeIds != null && noticeIds.size() > 0) { - Utils.log("======提交已读公告消息"); - JSONArray array = new JSONArray(); - for (String s : noticeIds.keySet()) { - array.put(s); - } - Utils.log("======客服id::" + array.toString()); - RequestBody body = RequestBody.create(MediaType.parse("application/json"), array.toString()); - postMarkRead("notice", true, body, readDao); - } - - } - - private void postMarkRead(final String type, boolean isCkeck, final RequestBody body, final MessageMarkReadDao readDao) { - TokenUtils - .getToken(MainActivity.this, isCkeck) - .flatMap(new Func1>() { - @Override - public Observable call(String token) { - if ("kefu".equals(type)) { - return RetrofitManager.getMessage().postMarkKeFuRead(body, token); - } else { - return RetrofitManager.getMessage().postMarkNoticeRead(body, token); - } - } - }) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Response() { - @Override - public void onResponse(ResponseBody response) { - super.onResponse(response); - Utils.log("=========postMarkRead::" + type); - if ("kefu".equals(type)) { - readDao.cleanKeFu(); - } else { - readDao.cleanNotice(); - } - - } - - @Override - public void onFailure(HttpException e) { - super.onFailure(e); - if (e != null && e.code() == 401) { - postMarkRead(type, false, body, readDao); - } - } - }); - - } - private void getSuggestionType() { RetrofitManager .getApi() @@ -996,7 +827,7 @@ public class MainActivity extends BaseActivity implements OnClickListener { final ArrayList concernDigest = new ArrayList<>(); if (arrGameId.size() == 0) { - EventBus.getDefault().post(new EBUISwitch("NewsFragment", -2)); // 没有关注 + EventBus.getDefault().post(new EBUISwitch("NewsWrapperFragment", -2)); // 没有关注 } List> list = new ArrayList<>(); @@ -1019,13 +850,6 @@ public class MainActivity extends BaseActivity implements OnClickListener { }); } - private void initViews() { - findViewById(R.id.main_ll_game).setOnClickListener(this); - findViewById(R.id.main_ll_news).setOnClickListener(this); - findViewById(R.id.main_ll_message).setOnClickListener(this); - findViewById(R.id.main_ll_personal).setOnClickListener(this); - } - private void checkPermission() { List installedList = getPackageManager().getInstalledPackages(0); if (installedList.isEmpty()) { @@ -1049,32 +873,6 @@ public class MainActivity extends BaseActivity implements OnClickListener { } } - private void getSearchHints() { - RetrofitManager.getApi().getSearchHints() - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Response>() { - @Override - public void onResponse(ArrayList response) { - if (response.size() != 0) { -// if (response.size() == 1) { -// mSearchHintLint = response.get(0); -// } else { -// mSearchHintLint = response.get(RandomUtils.nextInt(response.size())); -// } - - mSearchHintLint = response; - if (gameFragment != null) { - gameFragment.setHint(mSearchHintLint); - } - if (newsFragment != null) { - newsFragment.setHint(mSearchHintLint); - } - } - } - }); - } - // 获取META-INF中的plugin_update 文件,判断是否从游戏插件中下载的app,是则获取游戏id,启动游戏更新,下载该游戏 private void getPluginUpdate() { ApplicationInfo appinfo = getApplicationInfo(); @@ -1109,133 +907,6 @@ public class MainActivity extends BaseActivity implements OnClickListener { } } - @Override - public void onClick(View v) { - final int id = v.getId(); - switch (v.getId()) { - case R.id.main_ll_game: - EventBus.getDefault().post(new EBUISwitch(EB_MAINACTIVITY_TAG, INDEX_GAME)); - setTabSelection(INDEX_GAME); - break; - case R.id.main_ll_news: - EventBus.getDefault().post(new EBUISwitch(EB_MAINACTIVITY_TAG, INDEX_NEWS)); - setTabSelection(INDEX_NEWS); - break; - case R.id.main_ll_message: - EventBus.getDefault().post(new EBUISwitch(EB_MAINACTIVITY_TAG, INDEX_MESSAGE)); - setTabSelection(INDEX_MESSAGE); - break; - case R.id.main_ll_personal: - EventBus.getDefault().post(new EBUISwitch(EB_MAINACTIVITY_TAG, INDEX_PERSONAL)); - setTabSelection(INDEX_PERSONAL); - break; - default: - break; - } - - SystemBarTintManager tintManager = getTintManager(); - if (tintManager != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - if (id == R.id.main_ll_personal) { - tintManager.setStatusBarTintResource(R.color.theme); - } else if (Build.MANUFACTURER.equals("Meizu") || Build.MANUFACTURER.equals("Xiaomi")) { - tintManager.setStatusBarTintColor(Color.WHITE); - } else { - tintManager.setStatusBarTintColor(Color.BLACK); - } - } - } - - private void setTabSelection(int index) { - clearSelection(); - FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); - hideFragments(transaction); - switch (index) { - case INDEX_GAME: - ivGame.setImageResource(R.drawable.ic_game_select); - tvGame.setChecked(true); - gameFragment = alterFragment(transaction, GameFragment.class); - break; - case INDEX_NEWS: - ivNews.setImageResource(R.drawable.ic_news_select); - tvNews.setChecked(true); - newsFragment = alterFragment(transaction, NewsFragment.class); - break; - case INDEX_MESSAGE: - ivMessage.setImageResource(R.drawable.ic_message_select); - tvMessage.setChecked(true); - messageFragment = alterFragment(transaction, MessageFragment.class); - break; - case INDEX_PERSONAL: - ivPersonal.setImageResource(R.drawable.ic_user_select); - tvPersonal.setChecked(true); - personalFragment = alterFragment(transaction, PersonalFragment.class); - break; - default: - break; - } - currentTab = index; - transaction.commit(); - } - - // 清除掉所有的选中状态。 - private void clearSelection() { - ivGame.setImageResource(R.drawable.ic_game_unselect); - ivNews.setImageResource(R.drawable.ic_news_unselect); - ivMessage.setImageResource(R.drawable.ic_message_unselect); - ivPersonal.setImageResource(R.drawable.ic_user_unselect); - - tvGame.setChecked(false); - tvNews.setChecked(false); - tvMessage.setChecked(false); - tvPersonal.setChecked(false); - } - - // 将所有的Fragment都置为隐藏状态。 - private void hideFragments(FragmentTransaction transaction) { - List list = getSupportFragmentManager().getFragments(); - if (list != null) { - for (Fragment fragment : list) { - transaction.hide(fragment); - } - } - } - - // private T alterFragment(Class cls) { - private T alterFragment(FragmentTransaction transaction, Class cls) { - T fragmentByTag = (T) getSupportFragmentManager().findFragmentByTag(cls.getSimpleName()); - try { - if (fragmentByTag != null) { - transaction.show(fragmentByTag); - } else { - fragmentByTag = cls.newInstance(); - transaction.add(R.id.main_content, fragmentByTag, cls.getSimpleName()); - if (fragmentByTag instanceof SearchBarHint && mSearchHintLint != null && mSearchHintLint.size() > 0) { - ((SearchBarHint) fragmentByTag).setHint(mSearchHintLint); - } - } - } catch (Exception e) { - e.printStackTrace(); - } - return fragmentByTag; - } - - @Subscribe(threadMode = ThreadMode.MAIN) - public void onEventMainThread(EBSkip skip) { - if (EB_SKIP_GAMEFRAGMENT.equals(skip.getType())) { - EventBus.getDefault().post(new EBUISwitch(EB_MAINACTIVITY_TAG, INDEX_GAME)); - setTabSelection(INDEX_GAME); - EventBus.getDefault().post(new EBSkip(EB_MAINACTIVITY_TAG, skip.getCurrentItem())); - } - } - - @Subscribe(threadMode = ThreadMode.MAIN) - public void onEventMainThread(EBReuse reuse) { - if (MessageFragment.MESSAGE_READ_OVER.equals(reuse.getType())) { - Utils.log("======= over??"); - mMessageHint.setVisibility(View.GONE); - } - } - @Subscribe(threadMode = ThreadMode.MAIN) public void onEventMainThread(EBPackage busFour) { final String packageName = busFour.getPackageName(); diff --git a/app/src/main/java/com/gh/gamecenter/SkipActivity.java b/app/src/main/java/com/gh/gamecenter/SkipActivity.java index 2974e5fd42..cc97b12c43 100644 --- a/app/src/main/java/com/gh/gamecenter/SkipActivity.java +++ b/app/src/main/java/com/gh/gamecenter/SkipActivity.java @@ -38,7 +38,7 @@ public class SkipActivity extends BaseActivity { @Override protected int getLayoutId() { //TODO 暂时无意义设置,避免崩溃罢了,修改完主题和Toolbar相关内容会干掉这个 - return R.layout.activity_main; + return R.layout.fragment_main; } @Override diff --git a/app/src/main/java/com/gh/gamecenter/adapter/ImagePagerAdapter.java b/app/src/main/java/com/gh/gamecenter/adapter/ImagePagerAdapter.java index 9a10c42c60..e75347b229 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/ImagePagerAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/ImagePagerAdapter.java @@ -70,6 +70,7 @@ public class ImagePagerAdapter extends RecyclingPagerAdapter { ImageUtils.getInstance().display(mContext.getResources(), (SimpleDraweeView) view, slideEntity.getImage(), R.drawable.preload); + // indicator.setPosition(mSlideEntityList.mSize(), getPosition(position)); view.setOnClickListener(new View.OnClickListener() { diff --git a/app/src/main/java/com/gh/gamecenter/adapter/viewholder/GameViewPagerViewHolder.java b/app/src/main/java/com/gh/gamecenter/adapter/viewholder/GameViewPagerViewHolder.java index 027209efb0..e4f5b76ff6 100644 --- a/app/src/main/java/com/gh/gamecenter/adapter/viewholder/GameViewPagerViewHolder.java +++ b/app/src/main/java/com/gh/gamecenter/adapter/viewholder/GameViewPagerViewHolder.java @@ -1,8 +1,9 @@ package com.gh.gamecenter.adapter.viewholder; import android.view.View; +import android.view.ViewGroup; +import android.widget.FrameLayout; import android.widget.LinearLayout; -import android.widget.RelativeLayout; import android.widget.TextView; import com.gh.base.BaseRecyclerViewHolder; @@ -23,15 +24,18 @@ public class GameViewPagerViewHolder extends BaseRecyclerViewHolder { public LinearLayout viewpager_ll_hint; @BindView(R.id.viewpager_tv_failure) public TextView viewpager_tv_failure; - @BindView(R.id.home_subject_rl) - public RelativeLayout subjectRl; @BindView(R.id.home_subject_failure) public TextView subjectFailure; @BindView(R.id.home_subject_ll) public LinearLayout subjectLl; - public GameViewPagerViewHolder(View itemView) { + public GameViewPagerViewHolder(View itemView, int width) { super(itemView); + // 傻逼viewpager拿不到高度,一定要自己算下,妈的,先不管了 + FrameLayout.LayoutParams params = new FrameLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, (int) (width / 16f * 7f)); + viewPager.setLayoutParams(params); + } } diff --git a/app/src/main/java/com/gh/gamecenter/download/FileSendFragment.java b/app/src/main/java/com/gh/gamecenter/download/FileSendFragment.java index db930a33d1..a5724f9943 100644 --- a/app/src/main/java/com/gh/gamecenter/download/FileSendFragment.java +++ b/app/src/main/java/com/gh/gamecenter/download/FileSendFragment.java @@ -6,7 +6,7 @@ import android.text.Html; import android.view.View; import android.widget.TextView; -import com.gh.base.BaseFragment; +import com.gh.base.fragment.BaseFragment; import com.gh.common.util.DialogUtils; import com.gh.common.util.StringUtils; import com.gh.gamecenter.CleanApkActivity; diff --git a/app/src/main/java/com/gh/gamecenter/download/GameDownloadFragment.java b/app/src/main/java/com/gh/gamecenter/download/GameDownloadFragment.java index 0639feb55a..52a438c1ac 100644 --- a/app/src/main/java/com/gh/gamecenter/download/GameDownloadFragment.java +++ b/app/src/main/java/com/gh/gamecenter/download/GameDownloadFragment.java @@ -15,7 +15,7 @@ import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; -import com.gh.base.BaseFragment; +import com.gh.base.fragment.BaseFragment; import com.gh.common.constant.Constants; import com.gh.common.util.DialogUtils; import com.gh.common.util.NetworkUtils; diff --git a/app/src/main/java/com/gh/gamecenter/download/GameUpdateFragment.java b/app/src/main/java/com/gh/gamecenter/download/GameUpdateFragment.java index ff40f55e54..f36aa86354 100644 --- a/app/src/main/java/com/gh/gamecenter/download/GameUpdateFragment.java +++ b/app/src/main/java/com/gh/gamecenter/download/GameUpdateFragment.java @@ -7,7 +7,7 @@ import android.view.View; import android.widget.LinearLayout; import android.widget.TextView; -import com.gh.base.BaseFragment; +import com.gh.base.fragment.BaseFragment; import com.gh.common.util.EntranceUtils; import com.gh.gamecenter.MainActivity; import com.gh.gamecenter.R; diff --git a/app/src/main/java/com/gh/gamecenter/fragment/GameFragment.java b/app/src/main/java/com/gh/gamecenter/fragment/GameFragment.java index 5ce40754a5..9eeeef4aff 100644 --- a/app/src/main/java/com/gh/gamecenter/fragment/GameFragment.java +++ b/app/src/main/java/com/gh/gamecenter/fragment/GameFragment.java @@ -37,7 +37,7 @@ import java.util.List; * Created by khy on 2016/12/6. * 新主界面 */ -public class GameFragment extends HomeFragment implements SwipeRefreshLayout.OnRefreshListener, OnRequestCallBackListener { +public class GameFragment extends SearchToolbarFragment implements SwipeRefreshLayout.OnRefreshListener, OnRequestCallBackListener { private SwipeRefreshLayout fm_game_swipe_refresh; private RecyclerView fm_game_rv_list; @@ -91,8 +91,7 @@ public class GameFragment extends HomeFragment implements SwipeRefreshLayout.OnR @Override protected void initView(final View view) { super.initView(view); - View inflate = View.inflate(getActivity(), R.layout.fragment_game, null); - ((LinearLayout) view).addView(inflate); + reuse_no_connection = (LinearLayout) view.findViewById(R.id.reuse_no_connection); fm_game_swipe_refresh = (SwipeRefreshLayout) view.findViewById(R.id.fm_game_swipe_refresh); fm_game_rv_list = (RecyclerView) view.findViewById(R.id.fm_game_rv_list); @@ -115,7 +114,7 @@ public class GameFragment extends HomeFragment implements SwipeRefreshLayout.OnR ((DefaultItemAnimator) fm_game_rv_list.getItemAnimator()).setSupportsChangeAnimations(false); fm_game_rv_list.setHasFixedSize(true); fm_game_rv_list.setLayoutManager(new LinearLayoutManager(getActivity())); - adapter = new GameFragmentAdapter(GameFragment.this, fm_game_swipe_refresh); + adapter = new GameFragmentAdapter(this, fm_game_swipe_refresh); fm_game_rv_list.setAdapter(adapter); fm_game_rv_list.addOnScrollListener(new RecyclerView.OnScrollListener() { diff --git a/app/src/main/java/com/gh/gamecenter/fragment/MainFragment.java b/app/src/main/java/com/gh/gamecenter/fragment/MainFragment.java index ba241ecb20..1af3438a05 100644 --- a/app/src/main/java/com/gh/gamecenter/fragment/MainFragment.java +++ b/app/src/main/java/com/gh/gamecenter/fragment/MainFragment.java @@ -1,10 +1,295 @@ -//package com.gh.gamecenter.fragment; -// -///** -// * @author CsHeng -// * @Date 05/05/2017 -// * @Time 3:26 PM -// */ -// -//public class MainFragment { -//} +package com.gh.gamecenter.fragment; + +import android.content.Context; +import android.graphics.Color; +import android.os.Build; +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; +import android.view.View; + +import com.gh.base.SearchBarHint; +import com.gh.base.fragment.BaseFragment_ViewPager_Checkable; +import com.gh.common.util.TokenUtils; +import com.gh.common.util.Utils; +import com.gh.gamecenter.MainActivity; +import com.gh.gamecenter.R; +import com.gh.gamecenter.db.KeFuMarkReadDao; +import com.gh.gamecenter.db.MessageMarkReadDao; +import com.gh.gamecenter.db.info.MessageMarkReadInfo; +import com.gh.gamecenter.entity.MessageUnreadEntity; +import com.gh.gamecenter.eventbus.EBReuse; +import com.gh.gamecenter.eventbus.EBSkip; +import com.gh.gamecenter.eventbus.EBUISwitch; +import com.gh.gamecenter.message.MessageFragment; +import com.gh.gamecenter.news.NewsWrapperFragment; +import com.gh.gamecenter.personal.PersonalFragment; +import com.gh.gamecenter.retrofit.Response; +import com.gh.gamecenter.retrofit.RetrofitManager; +import com.lightgame.view.NoScrollableViewPager; +import com.readystatesoftware.systembartint.SystemBarTintManager; + +import org.greenrobot.eventbus.EventBus; +import org.greenrobot.eventbus.Subscribe; +import org.greenrobot.eventbus.ThreadMode; +import org.json.JSONArray; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import butterknife.BindView; +import okhttp3.MediaType; +import okhttp3.RequestBody; +import okhttp3.ResponseBody; +import retrofit2.HttpException; +import rx.Observable; +import rx.android.schedulers.AndroidSchedulers; +import rx.functions.Func1; +import rx.schedulers.Schedulers; + +import static com.gh.gamecenter.MainActivity.EB_MAINACTIVITY_TAG; +import static com.gh.gamecenter.MainActivity.EB_SKIP_GAMEFRAGMENT; + +/** + * @author CsHeng + * @Date 05/05/2017 + * @Time 3:26 PM + */ + +public class MainFragment extends BaseFragment_ViewPager_Checkable { + + public static final int INDEX_GAME = 0; + public static final int INDEX_NEWS = 1; + public static final int INDEX_MESSAGE = 2; + public static final int INDEX_PERSONAL = 3; + private ArrayList mSearchHintLint; + @BindView(R.id.main_iv_message_hint) + View mMessageHint; + + @Override + protected int getLayoutId() { + return R.layout.fragment_main; + } + + @Override + protected int getCheckableGroupId() { + return R.id.lightgame_tab_container; + } + + @Override + protected int getViewPagerId() { + return R.id.lightgame_tab_viewpager; + } + + @Override + protected void initFragmentList(List fragments) { + fragments.add(new GameFragment()); + fragments.add(new NewsWrapperFragment()); + fragments.add(new MessageFragment()); + fragments.add(new PersonalFragment()); + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + checkMarkRead(getContext()); // 检查是否有记录已读消息 + checkMessageUnread(getContext(), true); // 检查是否有未读消息 + } + + @Override + public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + if (mViewPager instanceof NoScrollableViewPager) { + ((NoScrollableViewPager) mViewPager).setScrollable(false); + } + getSearchHints(); + } + + @Override + protected boolean handleOnClick(View view) { + boolean res = super.handleOnClick(view); + EventBus.getDefault().post(new EBUISwitch(EB_MAINACTIVITY_TAG, mCheckedIndex)); + return res; + } + + @Override + protected void onPageChanged(int index) { + super.onPageChanged(index); + + Fragment fragment = mFragmentsList.get(index); + if (fragment instanceof SearchBarHint && mSearchHintLint != null && !mSearchHintLint.isEmpty()) { + ((SearchBarHint) fragment).setHint(mSearchHintLint); + } + + if (getActivity() instanceof MainActivity) { + SystemBarTintManager tintManager = ((MainActivity) getActivity()).getTintManager(); + if (tintManager != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + if (index == INDEX_PERSONAL) { + tintManager.setStatusBarTintResource(R.color.theme); + } else if (Build.MANUFACTURER.equals("Meizu") || Build.MANUFACTURER.equals("Xiaomi")) { + tintManager.setStatusBarTintColor(Color.WHITE); + } else { + tintManager.setStatusBarTintColor(Color.BLACK); + } + } + } + } + + @Subscribe(threadMode = ThreadMode.MAIN) + public void onEventMainThread(EBSkip skip) { + if (EB_SKIP_GAMEFRAGMENT.equals(skip.getType())) { + EventBus.getDefault().post(new EBUISwitch(EB_MAINACTIVITY_TAG, INDEX_GAME)); + checkIndex(INDEX_GAME); + EventBus.getDefault().post(new EBSkip(EB_MAINACTIVITY_TAG, skip.getCurrentItem())); + } + } + + @Subscribe(threadMode = ThreadMode.MAIN) + public void onEventMainThread(EBReuse reuse) { + if (MessageFragment.MESSAGE_READ_OVER.equals(reuse.getType())) { + if (mMessageHint != null) { + mMessageHint.setVisibility(View.GONE); + } + } + } + + private void getSearchHints() { + RetrofitManager.getApi().getSearchHints() + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Response>() { + @Override + public void onResponse(ArrayList response) { + if (response.size() != 0) { + mSearchHintLint = response; + + for (Fragment fragment : mFragmentsList) { + if (fragment instanceof SearchBarHint) { + ((SearchBarHint) fragment).setHint(mSearchHintLint); + } + } + } + } + }); + } + + private void checkMessageUnread(final Context context, boolean isCheck) { + TokenUtils.getToken(context, isCheck) + .flatMap(new Func1>() { + @Override + public Observable call(String token) { + return RetrofitManager.getMessage().getMessageUnread(token); + } + }) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Response() { + @Override + public void onResponse(MessageUnreadEntity response) { + super.onResponse(response); + if (response != null && response.getKefuList() != null && response.getKefuList().size() > 0) { + KeFuMarkReadDao dao = new KeFuMarkReadDao(context); + for (int i = 0; i < response.getKefuList().size(); i++) { + if (dao.isMarkRead(response.getKefuList().get(i))) { + response.getKefuList().remove(i); + i--; + } + } + + if (response.getKefuList() != null && response.getKefuList().size() > 0) { + mMessageHint.setVisibility(View.VISIBLE); + } + + } + + if (response != null && response.getComment() > 0) { + mMessageHint.setVisibility(View.VISIBLE); + } + } + + @Override + public void onFailure(HttpException e) { + if (e != null && e.code() == 401) { + checkMessageUnread(getContext(), false); + } + } + }); + } + + private void checkMarkRead(Context context) { + MessageMarkReadDao readDao = new MessageMarkReadDao(context); + List readInfos = readDao.getAll(); + if (readInfos == null || readInfos.size() == 0) { + return; + } + + MessageMarkReadInfo readInfo = readInfos.get(0); + HashMap kefuIds = readInfo.getKefuIds(); + HashMap noticeIds = readInfo.getNoticeIds(); + + if (kefuIds != null && kefuIds.size() > 0) { + Utils.log("======提交已读客服消息"); + JSONArray array = new JSONArray(); + for (String s : kefuIds.keySet()) { + array.put(s); + } + Utils.log("======客服id::" + array.toString()); + RequestBody body = RequestBody.create(MediaType.parse("application/json"), array.toString()); + postMarkRead(context, "kefu", true, body, readDao); + } + + if (noticeIds != null && noticeIds.size() > 0) { + Utils.log("======提交已读公告消息"); + JSONArray array = new JSONArray(); + for (String s : noticeIds.keySet()) { + array.put(s); + } + Utils.log("======客服id::" + array.toString()); + RequestBody body = RequestBody.create(MediaType.parse("application/json"), array.toString()); + postMarkRead(context, "notice", true, body, readDao); + } + + } + + private void postMarkRead(final Context context, final String type, boolean isCkeck, final RequestBody body, + final MessageMarkReadDao readDao) { + TokenUtils.getToken(context, isCkeck) + .flatMap(new Func1>() { + @Override + public Observable call(String token) { + if ("kefu".equals(type)) { + return RetrofitManager.getMessage().postMarkKeFuRead(body, token); + } else { + return RetrofitManager.getMessage().postMarkNoticeRead(body, token); + } + } + }) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Response() { + @Override + public void onResponse(ResponseBody response) { + super.onResponse(response); + Utils.log("=========postMarkRead::" + type); + if ("kefu".equals(type)) { + readDao.cleanKeFu(); + } else { + readDao.cleanNotice(); + } + + } + + @Override + public void onFailure(HttpException e) { + super.onFailure(e); + if (e != null && e.code() == 401) { + postMarkRead(context, type, false, body, readDao); + } + } + }); + + } + +} diff --git a/app/src/main/java/com/gh/gamecenter/fragment/NewsFragment.java b/app/src/main/java/com/gh/gamecenter/fragment/NewsFragment.java new file mode 100644 index 0000000000..636ff5a57d --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/fragment/NewsFragment.java @@ -0,0 +1,129 @@ +package com.gh.gamecenter.fragment; + +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; +import android.util.DisplayMetrics; +import android.view.View; +import android.widget.LinearLayout; + +import com.gh.base.fragment.BaseFragment_ViewPager_Checkable; +import com.gh.common.util.DataCollectionUtils; +import com.gh.common.util.DisplayUtils; +import com.gh.gamecenter.MainActivity; +import com.gh.gamecenter.R; +import com.gh.gamecenter.eventbus.EBUISwitch; +import com.gh.gamecenter.news.News1Fragment; +import com.gh.gamecenter.news.News2Fragment; +import com.gh.gamecenter.news.News3Fragment; +import com.gh.gamecenter.news.News4Fragment; + +import org.greenrobot.eventbus.EventBus; +import org.greenrobot.eventbus.Subscribe; +import org.greenrobot.eventbus.ThreadMode; + +import java.util.List; + +import butterknife.BindView; + +import static com.gh.gamecenter.news.NewsWrapperFragment.EB_NEWSFRAGMENT_TAG; + +/** + * @author CsHeng + * @Date 17/06/2017 + * @Time 10:30 AM + */ + +public class NewsFragment extends BaseFragment_ViewPager_Checkable { + + @BindView(R.id.slidebar_line) + View mNewsSlidebarLine; + private LinearLayout.LayoutParams mLayoutParams; + private int mWidth; + + @Override + protected int getLayoutId() { + return R.layout.fragment_news; + } + + @Override + protected int getCheckableGroupId() { + return R.id.lightgame_tab_container; + } + + @Override + protected int getViewPagerId() { + return R.id.lightgame_tab_viewpager; + } + + @Override + protected void initFragmentList(List fragments) { + fragments.add(new News1Fragment()); + fragments.add(new News2Fragment()); + fragments.add(new News3Fragment()); + fragments.add(new News4Fragment()); + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + DisplayMetrics outMetrics = new DisplayMetrics(); + getActivity().getWindowManager().getDefaultDisplay().getMetrics(outMetrics); + mWidth = outMetrics.widthPixels / 4; + mLayoutParams = new LinearLayout.LayoutParams(mWidth / 2, DisplayUtils.dip2px(getActivity(), 2)); + } + + @Override + public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + + mLayoutParams.leftMargin = (int) (mWidth * (mCheckedIndex + 0.25f)); + mNewsSlidebarLine.setLayoutParams(mLayoutParams); + + view.postDelayed(new Runnable() { + @Override + public void run() { + EventBus.getDefault().post(new EBUISwitch(EB_NEWSFRAGMENT_TAG, mCheckedIndex)); + } + }, 100); + } + + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + super.onPageScrolled(position, positionOffset, positionOffsetPixels); + if (positionOffset != 0) { + mLayoutParams.leftMargin = (int) (mWidth * (position + positionOffset + 0.25f)); + mNewsSlidebarLine.setLayoutParams(mLayoutParams); +// } else { +// if (currentItem != mNewsVP.getCurrentItem()) { +// currentItem = mNewsVP.getCurrentItem(); +// EventBus.getDefault().post(new EBUISwitch(EB_NEWSFRAGMENT_TAG, currentItem)); +// } + } + } + + @Override + protected void onPageChanged(int index) { + super.onPageChanged(index); + if (index == 0) { + DataCollectionUtils.uploadPosition(getActivity(), "资讯", "1", "资讯"); + } else if (index == 1) { + DataCollectionUtils.uploadPosition(getActivity(), "资讯", "2", "攻略"); + } else if (index == 2) { + DataCollectionUtils.uploadPosition(getActivity(), "资讯", "3", "原创"); + } else if (index == 3) { + DataCollectionUtils.uploadPosition(getActivity(), "资讯", "4", "关注"); + } + } + + @Subscribe(threadMode = ThreadMode.MAIN) + public void onEventMainThread(EBUISwitch busNine) { + if (MainActivity.EB_MAINACTIVITY_TAG.equals(busNine.getFrom())) { + if (busNine.getPosition() == 1) { + EventBus.getDefault().post(new EBUISwitch(EB_NEWSFRAGMENT_TAG, mCheckedIndex)); + } + } + } + + +} diff --git a/app/src/main/java/com/gh/gamecenter/fragment/HomeFragment.java b/app/src/main/java/com/gh/gamecenter/fragment/SearchToolbarFragment.java similarity index 64% rename from app/src/main/java/com/gh/gamecenter/fragment/HomeFragment.java rename to app/src/main/java/com/gh/gamecenter/fragment/SearchToolbarFragment.java index 5c9404e453..b27fe10d93 100644 --- a/app/src/main/java/com/gh/gamecenter/fragment/HomeFragment.java +++ b/app/src/main/java/com/gh/gamecenter/fragment/SearchToolbarFragment.java @@ -7,15 +7,13 @@ import android.view.View; import android.view.animation.AlphaAnimation; import android.view.animation.Animation; import android.view.animation.ScaleAnimation; -import android.widget.LinearLayout; import android.widget.TextView; -import com.gh.base.BaseFragment; import com.gh.base.SearchBarHint; +import com.gh.base.fragment.BaseFragment; import com.gh.common.constant.Config; import com.gh.common.util.DataCollectionUtils; import com.gh.common.util.DataUtils; -import com.gh.common.util.DisplayUtils; import com.gh.common.util.EntranceUtils; import com.gh.download.DownloadManager; import com.gh.gamecenter.ConcernActivity; @@ -38,39 +36,35 @@ import butterknife.BindView; * Created by LGT on 2016/9/9. * 工具栏 搜索控制 */ -public abstract class HomeFragment extends BaseFragment implements View.OnClickListener, SearchBarHint { +public class SearchToolbarFragment extends BaseFragment implements View.OnClickListener, SearchBarHint { - private TextView downloadHint; - private TextView searchHint; + @BindView(R.id.action_tip) + TextView mDownloadHintTv; + + @BindView(R.id.actionbar_search_input) + TextView mSearchHintTv; + + @BindView(R.id.actionbar_rl_download) + View mDownloadView; private AlphaAnimation mAlphaAnimation; - private ArrayList hintList; - private int hintIndex; + private ArrayList mHintList; + private int mHintIndex; - @BindView(R.id.actionbar_rl_download) - View mActionBarDownloadView; + @Override + protected int getLayoutId() { + return R.layout.fragment_toolbar; + } @Override protected void initView(View view) { super.initView(view); -// SharedPreferences sp = getActivity().getSharedPreferences( -// Config.PREFERENCE, Context.MODE_PRIVATE); - LinearLayout home_actionbar = (LinearLayout) view.findViewById(R.id.home_actionbar); - LinearLayout.LayoutParams lparams = new LinearLayout.LayoutParams( - LinearLayout.LayoutParams.MATCH_PARENT, DisplayUtils.dip2px(getActivity(), 55)); - -// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { -// int top = DisplayUtils.getStatusBarHeight(getResources()); -// home_actionbar.setPadding(0, top, 0, 0); -// lparams.height += top; -// } - home_actionbar.setLayoutParams(lparams); initActionBar(view); - final ScaleAnimation scaleAnimation = new ScaleAnimation(0.4f, 1.0f, 0.4f, 1.0f - , Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); + final ScaleAnimation scaleAnimation = new ScaleAnimation(0.4f, 1.0f, 0.4f, 1.0f, + Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); scaleAnimation.setDuration(500); mAlphaAnimation = new AlphaAnimation(1f, 0.2f); @@ -86,7 +80,7 @@ public abstract class HomeFragment extends BaseFragment implements View.OnClickL @Override public void onAnimationEnd(Animation animation) { if (mAlphaAnimation != null) { - searchHint.setAnimation(mAlphaAnimation); + mSearchHintTv.setAnimation(mAlphaAnimation); mAlphaAnimation.start(); } } @@ -106,14 +100,14 @@ public abstract class HomeFragment extends BaseFragment implements View.OnClickL @Override public void onAnimationEnd(Animation animation) { // 切换数据 - if (hintIndex > hintList.size() - 1) { - hintIndex = 0; + if (mHintIndex > mHintList.size() - 1) { + mHintIndex = 0; } - searchHint.setHint(hintList.get(hintIndex)); - hintIndex++; + mSearchHintTv.setHint(mHintList.get(mHintIndex)); + mHintIndex++; if (scaleAnimation != null) { - searchHint.setAnimation(scaleAnimation); + mSearchHintTv.setAnimation(scaleAnimation); scaleAnimation.start(); } } @@ -124,12 +118,12 @@ public abstract class HomeFragment extends BaseFragment implements View.OnClickL } }); - if (hintList != null && hintList.size() > 0) { - if (hintList.size() > 1) { - searchHint.setAnimation(mAlphaAnimation); + if (mHintList != null && mHintList.size() > 0) { + if (mHintList.size() > 1) { + mSearchHintTv.setAnimation(mAlphaAnimation); } else { - String hint = hintList.get(0); - searchHint.setHint(hint); + String hint = mHintList.get(0); + mSearchHintTv.setHint(hint); } } @@ -140,49 +134,47 @@ public abstract class HomeFragment extends BaseFragment implements View.OnClickL super.onCreate(savedInstanceState); if (savedInstanceState != null) { - hintList = savedInstanceState.getStringArrayList("hint"); + mHintList = savedInstanceState.getStringArrayList("hint"); } - hintIndex = 0; + mHintIndex = 0; } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); - if (hintList != null && !hintList.isEmpty()) { - outState.putStringArrayList("hint", hintList); + if (mHintList != null && !mHintList.isEmpty()) { + outState.putStringArrayList("hint", mHintList); } } private void initActionBar(View view) { - mActionBarDownloadView.setOnClickListener(this); + mDownloadView.setOnClickListener(this); view.findViewById(R.id.actionbar_iv_search).setOnClickListener(this); view.findViewById(R.id.actionbar_notification).setOnClickListener(this); view.findViewById(R.id.actionbar_search_rl).setOnClickListener(this); if (Config.isShow(getActivity())) { - mActionBarDownloadView.setVisibility(View.VISIBLE); + mDownloadView.setVisibility(View.VISIBLE); } else { - mActionBarDownloadView.setVisibility(View.GONE); + mDownloadView.setVisibility(View.GONE); } - downloadHint = (TextView) view.findViewById(R.id.action_tip); int updateSize = PackageManager.getUpdateListSize(); int downloadSize = DownloadManager.getInstance(getActivity()).getAll().size(); if (downloadSize != 0) { - downloadHint.setVisibility(View.VISIBLE); - downloadHint.setText(String.valueOf(downloadSize)); + mDownloadHintTv.setVisibility(View.VISIBLE); + mDownloadHintTv.setText(String.valueOf(downloadSize)); } else if (updateSize != 0) { - downloadHint.setVisibility(View.VISIBLE); - downloadHint.setText(String.valueOf(updateSize)); + mDownloadHintTv.setVisibility(View.VISIBLE); + mDownloadHintTv.setText(String.valueOf(updateSize)); } else { - downloadHint.setVisibility(View.GONE); + mDownloadHintTv.setVisibility(View.GONE); } - searchHint = (TextView) view.findViewById(R.id.actionbar_search_input); - searchHint.setOnClickListener(this); + mSearchHintTv.setOnClickListener(this); } @Override @@ -199,7 +191,7 @@ public abstract class HomeFragment extends BaseFragment implements View.OnClickL Intent intent = new Intent(getActivity(), SearchActivity.class); intent.putExtra("clicked", true); - intent.putExtra("hint", searchHint.getHint().toString()); + intent.putExtra("hint", mSearchHintTv.getHint().toString()); intent.putExtra(EntranceUtils.KEY_ENTRANCE, "(工具栏)"); startActivity(intent); } else if (id == R.id.actionbar_search_input || id == R.id.actionbar_search_rl) { @@ -208,7 +200,7 @@ public abstract class HomeFragment extends BaseFragment implements View.OnClickL Intent intent = new Intent(getActivity(), SearchActivity.class); intent.putExtra("clicked", false); - intent.putExtra("hint", searchHint.getHint().toString()); + intent.putExtra("hint", mSearchHintTv.getHint().toString()); intent.putExtra(EntranceUtils.KEY_ENTRANCE, "(工具栏)"); startActivity(intent); } else if (id == R.id.actionbar_notification) { @@ -226,9 +218,9 @@ public abstract class HomeFragment extends BaseFragment implements View.OnClickL public void onEventMainThread(EBReuse reuse) { if ("Refresh".equals(reuse.getType())) { if (Config.isShow(getActivity())) { - mActionBarDownloadView.setVisibility(View.VISIBLE); + mDownloadView.setVisibility(View.VISIBLE); } else { - mActionBarDownloadView.setVisibility(View.GONE); + mDownloadView.setVisibility(View.GONE); } } } @@ -238,24 +230,24 @@ public abstract class HomeFragment extends BaseFragment implements View.OnClickL int updateSize = PackageManager.getUpdateListSize(); int downloadSize = DownloadManager.getInstance(getActivity()).getAll().size(); if (downloadSize != 0) { - downloadHint.setVisibility(View.VISIBLE); - downloadHint.setText(String.valueOf(downloadSize)); + mDownloadHintTv.setVisibility(View.VISIBLE); + mDownloadHintTv.setText(String.valueOf(downloadSize)); } else if (updateSize != 0) { - downloadHint.setVisibility(View.VISIBLE); - downloadHint.setText(String.valueOf(updateSize)); + mDownloadHintTv.setVisibility(View.VISIBLE); + mDownloadHintTv.setText(String.valueOf(updateSize)); } else { - downloadHint.setVisibility(View.GONE); + mDownloadHintTv.setVisibility(View.GONE); } } @Override public void setHint(ArrayList hint) { if (hint != null && hint.size() > 0) { - hintList = hint; - if (hint.size() == 1 && searchHint != null) { - searchHint.setHint(hintList.get(0)); - } else if (mAlphaAnimation != null && searchHint != null) { - searchHint.setAnimation(mAlphaAnimation); + mHintList = hint; + if (hint.size() == 1 && mSearchHintTv != null) { + mSearchHintTv.setHint(mHintList.get(0)); + } else if (mAlphaAnimation != null && mSearchHintTv != null) { + mSearchHintTv.setAnimation(mAlphaAnimation); } } } diff --git a/app/src/main/java/com/gh/gamecenter/game/GameFragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/game/GameFragmentAdapter.java index 3e2472a771..a01fa78a0c 100644 --- a/app/src/main/java/com/gh/gamecenter/game/GameFragmentAdapter.java +++ b/app/src/main/java/com/gh/gamecenter/game/GameFragmentAdapter.java @@ -11,18 +11,18 @@ import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView.ViewHolder; import android.text.TextUtils; import android.util.DisplayMetrics; -import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ProgressBar; -import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import com.facebook.drawee.view.SimpleDraweeView; +import com.gh.base.OnRequestCallBackListener; +import com.gh.base.adapter.BaseRecyclerAdapter; import com.gh.common.constant.ItemViewType; import com.gh.common.util.ApkActiveUtils; import com.gh.common.util.DataCollectionUtils; @@ -46,7 +46,6 @@ import com.gh.gamecenter.PluginActivity; import com.gh.gamecenter.R; import com.gh.gamecenter.SubjectActivity; import com.gh.gamecenter.ToolBoxActivity; -import com.gh.base.adapter.BaseRecyclerAdapter; import com.gh.gamecenter.adapter.ImagePagerAdapter; import com.gh.gamecenter.adapter.viewholder.FooterViewHolder; import com.gh.gamecenter.adapter.viewholder.GameHeadViewHolder; @@ -62,7 +61,6 @@ import com.gh.gamecenter.entity.SlideEntity; import com.gh.gamecenter.entity.SubjectDigestEntity; import com.gh.gamecenter.entity.SubjectEntity; import com.gh.gamecenter.fragment.GameFragment; -import com.gh.base.OnRequestCallBackListener; import com.gh.gamecenter.manager.GameManager; import com.gh.gamecenter.manager.PackageManager; import com.gh.gamecenter.retrofit.Response; @@ -74,7 +72,6 @@ import java.util.List; import java.util.Locale; import java.util.Map; -import cn.trinea.android.view.autoscrollviewpager.AutoScrollViewPager; import retrofit2.HttpException; import rx.android.schedulers.AndroidSchedulers; import rx.functions.Func1; @@ -108,7 +105,6 @@ public class GameFragmentAdapter extends BaseRecyclerAdapter { private boolean mIsOver; private boolean mIsInitPlugin; private boolean mIsAutoScroll; - private int mTopHeight; public GameFragmentAdapter(GameFragment gameFragment, SwipeRefreshLayout refreshLayout) { super(gameFragment.getContext()); @@ -137,11 +133,6 @@ public class GameFragmentAdapter extends BaseRecyclerAdapter { mIsInitPlugin = false; mIsAutoScroll = false; - DisplayMetrics outMetrics = new DisplayMetrics(); - gameFragment.getActivity().getWindowManager().getDefaultDisplay().getMetrics(outMetrics); - - mTopHeight = (int) (outMetrics.widthPixels / 16f * 10.5f); - initSubjectDigest(true); } @@ -461,52 +452,20 @@ public class GameFragmentAdapter extends BaseRecyclerAdapter { @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (viewType == ItemViewType.GAME_SLIDE) { - View view = mLayoutInflater.inflate(R.layout.game_viewpager_item, parent, false); DisplayMetrics outMetrics = new DisplayMetrics(); mGameFragment.getActivity().getWindowManager().getDefaultDisplay().getMetrics(outMetrics); - LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( - LinearLayout.LayoutParams.MATCH_PARENT, mTopHeight); //整个头部大小16:10 viewpager大小16:7 - view.setLayoutParams(params); - - AutoScrollViewPager viewPager = (AutoScrollViewPager) view.findViewById(R.id.view_pager); - RelativeLayout.LayoutParams vpParams = new RelativeLayout.LayoutParams( - ViewGroup.LayoutParams.MATCH_PARENT, (int) (outMetrics.widthPixels / 16f * 7f)); - viewPager.setLayoutParams(vpParams); - - RelativeLayout subjectRl = (RelativeLayout) view.findViewById(R.id.home_subject_rl); - RelativeLayout.LayoutParams subjectParams = new RelativeLayout.LayoutParams( - ViewGroup.LayoutParams.MATCH_PARENT, (int) (outMetrics.widthPixels / 16f * 3.5f)); - subjectParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); - subjectRl.setLayoutParams(subjectParams); - - LinearLayout hint = (LinearLayout) view.findViewById(R.id.viewpager_ll_hint); - RelativeLayout.LayoutParams hintParams = new RelativeLayout.LayoutParams( - ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); - hintParams.setMargins(0, (int) (outMetrics.widthPixels / 16f * 6.5f), DisplayUtils.dip2px(mContext, 10), 0); - hintParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); - hint.setLayoutParams(hintParams); - - return new GameViewPagerViewHolder(view); + return new GameViewPagerViewHolder(mLayoutInflater.inflate(R.layout.game_viewpager_item, parent, false), + outMetrics.widthPixels); } else if (viewType == ItemViewType.COLUMN_HEADER) { - View view = LayoutInflater.from(parent.getContext()).inflate( - R.layout.game_head_item, parent, false); - return new GameHeadViewHolder(view); + return new GameHeadViewHolder(mLayoutInflater.inflate(R.layout.game_head_item, parent, false)); } else if (viewType == ItemViewType.GAME_NORMAL) { - View view = LayoutInflater.from(parent.getContext()).inflate( - R.layout.game_normal_item, parent, false); - return new GameNormalViewHolder(view); + return new GameNormalViewHolder(mLayoutInflater.inflate(R.layout.game_normal_item, parent, false)); } else if (viewType == ItemViewType.GAME_TEST) { - View view = LayoutInflater.from(parent.getContext()).inflate( - R.layout.game_test_item, parent, false); - return new GameTestViewHolder(view); + return new GameTestViewHolder(mLayoutInflater.inflate(R.layout.game_test_item, parent, false)); } else if (viewType == ItemViewType.GAME_IMAGE) { - View view = LayoutInflater.from(parent.getContext()).inflate( - R.layout.game_image_item, parent, false); - return new GameImageViewHolder(view); + return new GameImageViewHolder(mLayoutInflater.inflate(R.layout.game_image_item, parent, false)); } else if (viewType == ItemViewType.LOADING) { - View view = LayoutInflater.from(parent.getContext()).inflate( - R.layout.refresh_footerview, parent, false); - return new FooterViewHolder(view); + return new FooterViewHolder(mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false)); } return null; } @@ -604,18 +563,18 @@ public class GameFragmentAdapter extends BaseRecyclerAdapter { if (mSlideList.size() != 0 && viewHolder.viewPager.getAdapter() == null) { viewHolder.viewpager_ll_hint.removeAllViews(); + int margin = DisplayUtils.dip2px(mContext, 6); for (int i = 0, size = mSlideList.size(); i < size; i++) { ImageView imageView = new ImageView(mContext); - LinearLayout.LayoutParams lparams = new LinearLayout.LayoutParams( - DisplayUtils.dip2px(mContext, 6), DisplayUtils.dip2px(mContext, 6)); - lparams.bottomMargin = DisplayUtils.dip2px(mContext, 6); + LinearLayout.LayoutParams lparams = new LinearLayout.LayoutParams(margin, margin); +// lparams.bottomMargin = DisplayUtils.dip2px(mContext, 6); if (i == 0) { imageView.setImageResource(R.drawable.oval_hint_up); } else { imageView.setImageResource(R.drawable.oval_hint_dn); } if (i != 0) { - lparams.leftMargin = DisplayUtils.dip2px(mContext, 6); + lparams.leftMargin = margin; } imageView.setLayoutParams(lparams); viewHolder.viewpager_ll_hint.addView(imageView); diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/FuliFragment.java b/app/src/main/java/com/gh/gamecenter/gamedetail/FuliFragment.java index e40be171e5..0729d73060 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/FuliFragment.java +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/FuliFragment.java @@ -5,7 +5,7 @@ import android.support.annotation.Nullable; import android.support.v7.widget.RecyclerView; import android.view.View; -import com.gh.base.BaseFragment; +import com.gh.base.fragment.BaseFragment; import com.gh.common.view.MeasureLinearLayoutManager; import com.gh.common.view.VerticalItemDecoration; import com.gh.gamecenter.GameDetailActivity; diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/XinXiFragment.java b/app/src/main/java/com/gh/gamecenter/gamedetail/XinXiFragment.java index b3a76e3c4b..b84e1eed6e 100644 --- a/app/src/main/java/com/gh/gamecenter/gamedetail/XinXiFragment.java +++ b/app/src/main/java/com/gh/gamecenter/gamedetail/XinXiFragment.java @@ -5,7 +5,7 @@ import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View; -import com.gh.base.BaseFragment; +import com.gh.base.fragment.BaseFragment; import com.gh.common.util.DownloadItemUtils; import com.gh.download.DataWatcher; import com.gh.download.DownloadEntity; diff --git a/app/src/main/java/com/gh/gamecenter/libao/Libao1Fragment.java b/app/src/main/java/com/gh/gamecenter/libao/Libao1Fragment.java index 2339f6d070..d840ff36ee 100644 --- a/app/src/main/java/com/gh/gamecenter/libao/Libao1Fragment.java +++ b/app/src/main/java/com/gh/gamecenter/libao/Libao1Fragment.java @@ -11,7 +11,7 @@ import android.widget.LinearLayout; import android.widget.TextView; import com.gc.materialdesign.views.ProgressBarCircularIndeterminate; -import com.gh.base.BaseFragment; +import com.gh.base.fragment.BaseFragment; import com.gh.common.util.EntranceUtils; import com.gh.common.view.SwipeLayout; import com.gh.common.view.VerticalItemDecoration; diff --git a/app/src/main/java/com/gh/gamecenter/libao/Libao2Fragment.java b/app/src/main/java/com/gh/gamecenter/libao/Libao2Fragment.java index 232b53ee31..50a9fe81f0 100644 --- a/app/src/main/java/com/gh/gamecenter/libao/Libao2Fragment.java +++ b/app/src/main/java/com/gh/gamecenter/libao/Libao2Fragment.java @@ -10,7 +10,7 @@ import android.view.View; import android.widget.LinearLayout; import com.gc.materialdesign.views.ProgressBarCircularIndeterminate; -import com.gh.base.BaseFragment; +import com.gh.base.fragment.BaseFragment; import com.gh.common.view.VerticalItemDecoration; import com.gh.gamecenter.LibaoActivity; import com.gh.gamecenter.R; diff --git a/app/src/main/java/com/gh/gamecenter/libao/Libao3Fragment.java b/app/src/main/java/com/gh/gamecenter/libao/Libao3Fragment.java index cf1e8802a4..71af321214 100644 --- a/app/src/main/java/com/gh/gamecenter/libao/Libao3Fragment.java +++ b/app/src/main/java/com/gh/gamecenter/libao/Libao3Fragment.java @@ -9,7 +9,7 @@ import android.view.View; import android.widget.LinearLayout; import com.gc.materialdesign.views.ProgressBarCircularIndeterminate; -import com.gh.base.BaseFragment; +import com.gh.base.fragment.BaseFragment; import com.gh.common.view.VerticalItemDecoration; import com.gh.gamecenter.R; import com.gh.gamecenter.eventbus.EBReuse; diff --git a/app/src/main/java/com/gh/gamecenter/message/CommentFragment.java b/app/src/main/java/com/gh/gamecenter/message/CommentFragment.java index eeb1191701..2808189945 100644 --- a/app/src/main/java/com/gh/gamecenter/message/CommentFragment.java +++ b/app/src/main/java/com/gh/gamecenter/message/CommentFragment.java @@ -11,7 +11,7 @@ import android.widget.LinearLayout; import android.widget.TextView; import com.gc.materialdesign.views.ProgressBarCircularIndeterminate; -import com.gh.base.BaseFragment; +import com.gh.base.fragment.BaseFragment; import com.gh.common.view.VerticalItemDecoration; import com.gh.gamecenter.R; import com.gh.gamecenter.eventbus.EBUISwitch; diff --git a/app/src/main/java/com/gh/gamecenter/message/KeFuFragment.java b/app/src/main/java/com/gh/gamecenter/message/KeFuFragment.java index c83fbfdfc2..5d326a1584 100644 --- a/app/src/main/java/com/gh/gamecenter/message/KeFuFragment.java +++ b/app/src/main/java/com/gh/gamecenter/message/KeFuFragment.java @@ -10,7 +10,7 @@ import android.widget.LinearLayout; import android.widget.TextView; import com.gc.materialdesign.views.ProgressBarCircularIndeterminate; -import com.gh.base.BaseFragment; +import com.gh.base.fragment.BaseFragment; import com.gh.common.view.VerticalItemDecoration; import com.gh.gamecenter.R; import com.gh.gamecenter.eventbus.EBUISwitch; diff --git a/app/src/main/java/com/gh/gamecenter/message/MessageFragment.java b/app/src/main/java/com/gh/gamecenter/message/MessageFragment.java index 5ff6c3a6bc..9c3e4f25ad 100644 --- a/app/src/main/java/com/gh/gamecenter/message/MessageFragment.java +++ b/app/src/main/java/com/gh/gamecenter/message/MessageFragment.java @@ -1,21 +1,19 @@ package com.gh.gamecenter.message; import android.content.Context; +import android.os.Bundle; +import android.support.annotation.Nullable; import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentTransaction; -import android.support.v4.view.ViewPager; import android.util.DisplayMetrics; import android.view.View; import android.widget.LinearLayout; -import android.widget.RelativeLayout; import android.widget.TextView; -import com.gh.base.BaseFragment; +import com.gh.base.fragment.BaseFragment_ViewPager_Checkable; import com.gh.common.util.DisplayUtils; import com.gh.common.util.TokenUtils; import com.gh.common.util.Utils; import com.gh.gamecenter.R; -import com.gh.base.adapter.FragmentAdapter; import com.gh.gamecenter.db.KeFuMarkReadDao; import com.gh.gamecenter.entity.MessageUnreadEntity; import com.gh.gamecenter.eventbus.EBReuse; @@ -27,11 +25,9 @@ import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; -import java.util.ArrayList; import java.util.List; import butterknife.BindView; -import butterknife.OnClick; import okhttp3.ResponseBody; import retrofit2.HttpException; import rx.Observable; @@ -43,28 +39,22 @@ import rx.schedulers.Schedulers; * Created by khy on 2017/4/5. * 首页-消息 */ -public class MessageFragment extends BaseFragment implements ViewPager.OnPageChangeListener { +public class MessageFragment extends BaseFragment_ViewPager_Checkable { public static final String MESSAGE_READ_OVER = "messageReadOver"; public static final String EB_MESSAGEFRAGMENT_TAG = "MessageFragment"; - @BindView(R.id.message_comment_tv) - TextView mMessageCommentTv; + @BindView(R.id.message_comment_hint) TextView mMessageCommentHint; - @BindView(R.id.message_comment_ll) - LinearLayout mMessageCommentLl; - @BindView(R.id.message_kefu_tv) - TextView mMessageKefuTv; + @BindView(R.id.message_kefu_hint) View mMessageKefuHint; - @BindView(R.id.message_kefu_rl) - RelativeLayout mMessageKefuRl; + @BindView(R.id.message_slide_line) View mMessageSlideLine; - @BindView(R.id.meaasge_viewPager) - ViewPager mMeaasgeViewPager; - private LinearLayout.LayoutParams lparams; - private int width; + + private LinearLayout.LayoutParams mLayoutParams; + private int mWidth; private int mKeFuUnreadCount; @Override @@ -72,45 +62,49 @@ public class MessageFragment extends BaseFragment implements ViewPager.OnPageCha return R.layout.fragment_message; } + @Override + protected int getCheckableGroupId() { + return R.id.lightgame_tab_container; + } + + @Override + protected int getViewPagerId() { + return R.id.lightgame_tab_viewpager; + } + + @Override + protected void initFragmentList(List fragments) { + fragments.add(new CommentFragment()); + fragments.add(new KeFuFragment()); + } + @Override protected void initView(View view) { super.initView(view); - LinearLayout title = (LinearLayout) view.findViewById(R.id.actionbar_title_ll); - LinearLayout.LayoutParams tparams = new LinearLayout.LayoutParams( - LinearLayout.LayoutParams.MATCH_PARENT, DisplayUtils.dip2px(getActivity(), 55)); - - title.setLayoutParams(tparams); - DisplayMetrics outMetrics = new DisplayMetrics(); getActivity().getWindowManager().getDefaultDisplay().getMetrics(outMetrics); - width = outMetrics.widthPixels / 2; - lparams = new LinearLayout.LayoutParams((int) (width * 0.6), - DisplayUtils.dip2px(getContext(), 2)); - lparams.leftMargin = (int) (width * (0 + 0.2f)); - mMessageSlideLine.setLayoutParams(lparams); + mWidth = outMetrics.widthPixels / 2; + mLayoutParams = new LinearLayout.LayoutParams((int) (mWidth * 0.6), DisplayUtils.dip2px(getContext(), 2)); + mLayoutParams.leftMargin = (int) (mWidth * (0 + 0.2f)); + mMessageSlideLine.setLayoutParams(mLayoutParams); - mMessageCommentTv.setSelected(true); + initMessageUnread(getContext(), true); - List list = new ArrayList<>(); - list.add(new CommentFragment()); - list.add(new KeFuFragment()); - mMeaasgeViewPager.setAdapter(new FragmentAdapter(getChildFragmentManager(), list)); - mMeaasgeViewPager.addOnPageChangeListener(this); - mMeaasgeViewPager.setCurrentItem(0); + } - initMessageUnread(true); + @Override + public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); view.postDelayed(new Runnable() { @Override public void run() { - EventBus.getDefault().post(new EBUISwitch(EB_MESSAGEFRAGMENT_TAG, mMeaasgeViewPager.getCurrentItem())); + EventBus.getDefault().post(new EBUISwitch(EB_MESSAGEFRAGMENT_TAG, mCheckedIndex)); } }, 100); } - private void initMessageUnread(boolean isCheck) { - Context context = getContext(); - if (context == null) return; + private void initMessageUnread(final Context context, boolean isCheck) { TokenUtils.getToken(context, isCheck) .flatMap(new Func1>() { @Override @@ -130,7 +124,7 @@ public class MessageFragment extends BaseFragment implements ViewPager.OnPageCha } if (response.getKefuList() != null && response.getKefuList().size() > 0) { - KeFuMarkReadDao dao = new KeFuMarkReadDao(getContext()); + KeFuMarkReadDao dao = new KeFuMarkReadDao(context); for (int i = 0; i < response.getKefuList().size(); i++) { if (dao.isMarkRead(response.getKefuList().get(i))) { response.getKefuList().remove(i); @@ -148,7 +142,7 @@ public class MessageFragment extends BaseFragment implements ViewPager.OnPageCha @Override public void onFailure(HttpException e) { if (e != null && e.code() == 401) { - initMessageUnread(false); + initMessageUnread(context, false); } } }); @@ -157,27 +151,23 @@ public class MessageFragment extends BaseFragment implements ViewPager.OnPageCha // 隐藏未读提示 @Subscribe(threadMode = ThreadMode.MAIN) public void onEventMainThread(EBUISwitch reuse) { - if ("kefuMarkReadCount".equals(reuse.getFrom()) - && reuse.getPosition() == mKeFuUnreadCount) { + if ("kefuMarkReadCount".equals(reuse.getFrom()) && reuse.getPosition() == mKeFuUnreadCount) { mMessageKefuHint.setVisibility(View.GONE); - if (mMessageKefuHint.getVisibility() == View.GONE - && mMessageCommentHint.getVisibility() == View.GONE) { + if (mMessageKefuHint.getVisibility() == View.GONE && mMessageCommentHint.getVisibility() == View.GONE) { EventBus.getDefault().post(new EBReuse(MESSAGE_READ_OVER)); } - } else if ("commentMarkRead".equals(reuse.getFrom()) - && mMessageCommentHint.getVisibility() == View.VISIBLE) { + } else if ("commentMarkRead".equals(reuse.getFrom()) && mMessageCommentHint.getVisibility() == View.VISIBLE) { mMessageCommentHint.setVisibility(View.GONE); - postMarkCommentRead(true); - if (mMessageKefuHint.getVisibility() == View.GONE - && mMessageCommentHint.getVisibility() == View.GONE) { + postMarkCommentRead(getContext(), true); + if (mMessageKefuHint.getVisibility() == View.GONE && mMessageCommentHint.getVisibility() == View.GONE) { EventBus.getDefault().post(new EBReuse(MESSAGE_READ_OVER)); } } } - private void postMarkCommentRead(boolean isCheck) { + private void postMarkCommentRead(final Context context, boolean isCheck) { TokenUtils - .getToken(getContext(), isCheck) + .getToken(context, isCheck) .flatMap(new Func1>() { @Override public Observable call(String token) { @@ -197,67 +187,25 @@ public class MessageFragment extends BaseFragment implements ViewPager.OnPageCha public void onFailure(HttpException e) { super.onFailure(e); if (e != null && e.code() == 401) { - postMarkCommentRead(false); + postMarkCommentRead(context, false); } } }); } - - @OnClick({R.id.message_comment_ll, R.id.message_kefu_rl}) - public void onViewClicked(View view) { - switch (view.getId()) { - case R.id.message_comment_ll: - mMeaasgeViewPager.setCurrentItem(0); - break; - case R.id.message_kefu_rl: - mMeaasgeViewPager.setCurrentItem(1); - break; - } - } - @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + super.onPageScrolled(position, positionOffset, positionOffsetPixels); if (positionOffset != 0) { - lparams.leftMargin = (int) (width * (position + positionOffset + 0.2f)); - mMessageSlideLine.setLayoutParams(lparams); + mLayoutParams.leftMargin = (int) (mWidth * (position + positionOffset + 0.2f)); + mMessageSlideLine.setLayoutParams(mLayoutParams); } } @Override - public void onPageSelected(int position) { - if (position == 0) { - EventBus.getDefault().post(new EBUISwitch(EB_MESSAGEFRAGMENT_TAG, 0)); - mMessageCommentTv.setSelected(true); - mMessageKefuTv.setSelected(false); - } else if (position == 1) { - EventBus.getDefault().post(new EBUISwitch(EB_MESSAGEFRAGMENT_TAG, 1)); - mMessageCommentTv.setSelected(false); - mMessageKefuTv.setSelected(true); - } + protected void onPageChanged(int index) { + super.onPageChanged(index); + EventBus.getDefault().post(new EBUISwitch(EB_MESSAGEFRAGMENT_TAG, index)); } - @Override - public void onPageScrollStateChanged(int state) { - - } - - @Override - public void onHiddenChanged(boolean hidden) { - super.onHiddenChanged(hidden); - FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); - List list = getChildFragmentManager().getFragments(); - if (list != null) { - if (hidden) { - for (Fragment fragment : getChildFragmentManager().getFragments()) { - transaction.hide(fragment); - } - } else { - for (Fragment fragment : getChildFragmentManager().getFragments()) { - transaction.show(fragment); - } - } - } - transaction.commit(); - } } diff --git a/app/src/main/java/com/gh/gamecenter/message/NoticeFragment.java b/app/src/main/java/com/gh/gamecenter/message/NoticeFragment.java index dc633ea79a..0737b98149 100644 --- a/app/src/main/java/com/gh/gamecenter/message/NoticeFragment.java +++ b/app/src/main/java/com/gh/gamecenter/message/NoticeFragment.java @@ -10,7 +10,7 @@ import android.widget.LinearLayout; import android.widget.TextView; import com.gc.materialdesign.views.ProgressBarCircularIndeterminate; -import com.gh.base.BaseFragment; +import com.gh.base.fragment.BaseFragment; import com.gh.common.view.VerticalItemDecoration; import com.gh.gamecenter.R; import com.gh.gamecenter.eventbus.EBUISwitch; diff --git a/app/src/main/java/com/gh/gamecenter/news/News1Fragment.java b/app/src/main/java/com/gh/gamecenter/news/News1Fragment.java index c11d07cec7..99d49b8249 100644 --- a/app/src/main/java/com/gh/gamecenter/news/News1Fragment.java +++ b/app/src/main/java/com/gh/gamecenter/news/News1Fragment.java @@ -9,7 +9,7 @@ import android.view.View; import android.widget.LinearLayout; import com.gc.materialdesign.views.ProgressBarCircularIndeterminate; -import com.gh.base.BaseFragment; +import com.gh.base.fragment.BaseFragment; import com.gh.common.view.VerticalItemDecoration; import com.gh.gamecenter.R; import com.gh.gamecenter.eventbus.EBNetworkState; @@ -119,7 +119,7 @@ public class News1Fragment extends BaseFragment implements SwipeRefreshLayout.On // 资讯Fragment界面切换事件 @Subscribe(threadMode = ThreadMode.MAIN) public void onEventMainThread(EBUISwitch busNine) { - if (NewsFragment.EB_NEWSFRAGMENT_TAG.equals(busNine.getFrom())) { + if (NewsWrapperFragment.EB_NEWSFRAGMENT_TAG.equals(busNine.getFrom())) { if (busNine.getPosition() == 0) { if (loadingLayout.getVisibility() == View.VISIBLE) { adapter.addList(0); diff --git a/app/src/main/java/com/gh/gamecenter/news/News2Fragment.java b/app/src/main/java/com/gh/gamecenter/news/News2Fragment.java index c86766ab03..0c1dc9f714 100644 --- a/app/src/main/java/com/gh/gamecenter/news/News2Fragment.java +++ b/app/src/main/java/com/gh/gamecenter/news/News2Fragment.java @@ -16,7 +16,7 @@ import android.widget.TextView; import com.facebook.drawee.view.SimpleDraweeView; import com.gc.materialdesign.views.ProgressBarCircularIndeterminate; -import com.gh.base.BaseFragment; +import com.gh.base.fragment.BaseFragment; import com.gh.common.util.ApkActiveUtils; import com.gh.common.util.ImageUtils; import com.gh.common.util.PackageUtils; @@ -436,7 +436,7 @@ public class News2Fragment extends BaseFragment implements SwipeRefreshLayout.On // Fragment界面切换事件 @Subscribe(threadMode = ThreadMode.MAIN) public void onEventMainThread(EBUISwitch swith) { - if (NewsFragment.EB_NEWSFRAGMENT_TAG.equals(swith.getFrom())) { + if (NewsWrapperFragment.EB_NEWSFRAGMENT_TAG.equals(swith.getFrom())) { if (swith.getPosition() == 1) { if (loadingLayout.getVisibility() == View.VISIBLE) { adapter.addList(0); diff --git a/app/src/main/java/com/gh/gamecenter/news/News3Fragment.java b/app/src/main/java/com/gh/gamecenter/news/News3Fragment.java index f6cc71edd1..fe33d9f7b4 100644 --- a/app/src/main/java/com/gh/gamecenter/news/News3Fragment.java +++ b/app/src/main/java/com/gh/gamecenter/news/News3Fragment.java @@ -13,7 +13,7 @@ import android.widget.RelativeLayout; import android.widget.TextView; import com.gc.materialdesign.views.ProgressBarCircularIndeterminate; -import com.gh.base.BaseFragment; +import com.gh.base.fragment.BaseFragment; import com.gh.common.util.DisplayUtils; import com.gh.common.util.EntranceUtils; import com.gh.gamecenter.ConcernActivity; @@ -220,7 +220,7 @@ public class News3Fragment extends BaseFragment implements SwipeRefreshLayout.On // 资讯Fragment界面切换事件 @Subscribe(threadMode = ThreadMode.MAIN) public void onEventMainThread(EBUISwitch busNine) { - if (NewsFragment.EB_NEWSFRAGMENT_TAG.equals(busNine.getFrom())) { + if (NewsWrapperFragment.EB_NEWSFRAGMENT_TAG.equals(busNine.getFrom())) { if (busNine.getPosition() == 2 && mLoading.getVisibility() == View.VISIBLE) { mStrategyAdapter.addList(0); } diff --git a/app/src/main/java/com/gh/gamecenter/news/News4Fragment.java b/app/src/main/java/com/gh/gamecenter/news/News4Fragment.java index fa8a828059..37e95a3645 100644 --- a/app/src/main/java/com/gh/gamecenter/news/News4Fragment.java +++ b/app/src/main/java/com/gh/gamecenter/news/News4Fragment.java @@ -9,7 +9,7 @@ import android.view.View; import android.widget.LinearLayout; import com.gc.materialdesign.views.ProgressBarCircularIndeterminate; -import com.gh.base.BaseFragment; +import com.gh.base.fragment.BaseFragment; import com.gh.common.view.VerticalItemDecoration; import com.gh.gamecenter.R; import com.gh.gamecenter.eventbus.EBNetworkState; @@ -119,7 +119,7 @@ public class News4Fragment extends BaseFragment implements SwipeRefreshLayout.On // 资讯Fragment界面切换事件 @Subscribe(threadMode = ThreadMode.MAIN) public void onEventMainThread(EBUISwitch busNine) { - if (NewsFragment.EB_NEWSFRAGMENT_TAG.equals(busNine.getFrom())) { + if (NewsWrapperFragment.EB_NEWSFRAGMENT_TAG.equals(busNine.getFrom())) { if (busNine.getPosition() == 3) { if (loadingLayout.getVisibility() == View.VISIBLE) { adapter.addList(0); diff --git a/app/src/main/java/com/gh/gamecenter/news/NewsFragment.java b/app/src/main/java/com/gh/gamecenter/news/NewsFragment.java deleted file mode 100644 index 80d5c41aea..0000000000 --- a/app/src/main/java/com/gh/gamecenter/news/NewsFragment.java +++ /dev/null @@ -1,212 +0,0 @@ -package com.gh.gamecenter.news; - -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentTransaction; -import android.support.v4.view.ViewPager; -import android.util.DisplayMetrics; -import android.view.View; -import android.widget.LinearLayout; -import android.widget.TextView; - -import com.gh.common.util.DataCollectionUtils; -import com.gh.common.util.DisplayUtils; -import com.gh.gamecenter.MainActivity; -import com.gh.gamecenter.R; -import com.gh.base.adapter.FragmentAdapter; -import com.gh.gamecenter.eventbus.EBUISwitch; -import com.gh.gamecenter.fragment.HomeFragment; - -import org.greenrobot.eventbus.EventBus; -import org.greenrobot.eventbus.Subscribe; -import org.greenrobot.eventbus.ThreadMode; - -import java.util.ArrayList; -import java.util.List; - -import butterknife.BindView; -import butterknife.OnClick; - - -/** - * Created by khy on 2016/6/29. - * 资讯Fragment - */ -public class NewsFragment extends HomeFragment implements View.OnClickListener, ViewPager.OnPageChangeListener { - - public final static String EB_NEWSFRAGMENT_TAG = "NewsFragment"; - private View mNewsSlidebarLine; - private ViewPager mNewsVP; - private LinearLayout.LayoutParams lparams; - - @BindView(R.id.news_zixun_tv) - TextView mNewsZixun; - - @BindView(R.id.news_guanzhu_tv) - TextView mNewsGuanzhu; - - @BindView(R.id.news_gonglve_tv) - TextView mNewsGonglve; - - @BindView(R.id.news_yuanchuang_tv) - TextView mNewsYuanchuang; - - private int width; - private int currentItem; - - @Override - protected int getLayoutId() { - return R.layout.fragment_news; - } - - @Override - protected void initView(View view) { - super.initView(view); - mNewsSlidebarLine = view.findViewById(R.id.slidebar_line); - mNewsVP = (ViewPager) view.findViewById(R.id.page_vp_content); - mNewsZixun.setSelected(true); - } - - @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - List list = new ArrayList<>(); - list.add(new News1Fragment()); - list.add(new News2Fragment()); - list.add(new News3Fragment()); - list.add(new News4Fragment()); - mNewsVP.setAdapter(new FragmentAdapter(getChildFragmentManager(), list)); - mNewsVP.addOnPageChangeListener(this); - - currentItem = 0; - if (savedInstanceState != null) { - currentItem = savedInstanceState.getInt("currentItem"); - } - - mNewsVP.setCurrentItem(currentItem); - - DisplayMetrics outMetrics = new DisplayMetrics(); - getActivity().getWindowManager().getDefaultDisplay().getMetrics(outMetrics); - width = outMetrics.widthPixels / 4; - lparams = new LinearLayout.LayoutParams(width / 2, - DisplayUtils.dip2px(getActivity(), 2)); - lparams.leftMargin = (int) (width * (currentItem + 0.25f)); - mNewsSlidebarLine.setLayoutParams(lparams); - - view.postDelayed(new Runnable() { - @Override - public void run() { - EventBus.getDefault().post(new EBUISwitch(EB_NEWSFRAGMENT_TAG, mNewsVP.getCurrentItem())); - } - }, 100); - } - - @Override - public void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - outState.putInt("currentItem", currentItem); - } - - @OnClick({R.id.news_zixun_tv, R.id.news_guanzhu_tv, R.id.news_yuanchuang_tv, R.id.news_gonglve_tv}) - @Override - public void onClick(View v) { -// super.onClick(v); - switch (v.getId()) { - case R.id.news_zixun_tv: - mNewsVP.setCurrentItem(0); - break; - case R.id.news_guanzhu_tv: - mNewsVP.setCurrentItem(1); - break; - case R.id.news_gonglve_tv: - mNewsVP.setCurrentItem(2); - break; - case R.id.news_yuanchuang_tv: - mNewsVP.setCurrentItem(3); - break; - } - } - - @Override - public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { - if (positionOffset != 0) { - lparams.leftMargin = (int) (width * (position + positionOffset + 0.25f)); - mNewsSlidebarLine.setLayoutParams(lparams); - } else { - if (currentItem != mNewsVP.getCurrentItem()) { - currentItem = mNewsVP.getCurrentItem(); - EventBus.getDefault().post(new EBUISwitch(EB_NEWSFRAGMENT_TAG, currentItem)); - } - } - } - - @Override - public void onPageSelected(int position) { - if (position == 0) { - mNewsZixun.setSelected(true); - mNewsGuanzhu.setSelected(false); - mNewsGonglve.setSelected(false); - mNewsYuanchuang.setSelected(false); - - DataCollectionUtils.uploadPosition(getActivity(), "资讯", "1", "资讯"); - } else if (position == 1) { - mNewsZixun.setSelected(false); - mNewsGuanzhu.setSelected(true); - mNewsGonglve.setSelected(false); - mNewsYuanchuang.setSelected(false); - - DataCollectionUtils.uploadPosition(getActivity(), "资讯", "2", "攻略"); - } else if (position == 2) { - mNewsZixun.setSelected(false); - mNewsGuanzhu.setSelected(false); - mNewsGonglve.setSelected(true); - mNewsYuanchuang.setSelected(false); - - DataCollectionUtils.uploadPosition(getActivity(), "资讯", "3", "原创"); - } else if (position == 3) { - mNewsZixun.setSelected(false); - mNewsGuanzhu.setSelected(false); - mNewsGonglve.setSelected(false); - mNewsYuanchuang.setSelected(true); - - DataCollectionUtils.uploadPosition(getActivity(), "资讯", "4", "关注"); - } - } - - @Override - public void onPageScrollStateChanged(int i) { - - } - - @Subscribe(threadMode = ThreadMode.MAIN) - public void onEventMainThread(EBUISwitch busNine) { - if (MainActivity.EB_MAINACTIVITY_TAG.equals(busNine.getFrom())) { - if (busNine.getPosition() == 1) { - EventBus.getDefault().post(new EBUISwitch(EB_NEWSFRAGMENT_TAG, mNewsVP.getCurrentItem())); - } - } - } - - @Override - public void onHiddenChanged(boolean hidden) { - super.onHiddenChanged(hidden); - FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); - List list = getChildFragmentManager().getFragments(); - if (list != null) { - if (hidden) { - for (Fragment fragment : getChildFragmentManager().getFragments()) { - transaction.hide(fragment); - } - } else { - for (Fragment fragment : getChildFragmentManager().getFragments()) { - transaction.show(fragment); - } - } - } - transaction.commit(); - } - -} - diff --git a/app/src/main/java/com/gh/gamecenter/news/NewsWrapperFragment.java b/app/src/main/java/com/gh/gamecenter/news/NewsWrapperFragment.java new file mode 100644 index 0000000000..4466d0956d --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/news/NewsWrapperFragment.java @@ -0,0 +1,53 @@ +package com.gh.gamecenter.news; + +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.view.View; + +import com.gh.base.SearchBarHint; +import com.gh.base.fragment.BaseFragment; +import com.gh.gamecenter.R; +import com.gh.gamecenter.fragment.NewsFragment; +import com.gh.gamecenter.fragment.SearchToolbarFragment; + +import java.util.ArrayList; + + +/** + * Created by khy on 2016/6/29. + * 资讯Fragment + */ +public class NewsWrapperFragment extends BaseFragment implements SearchBarHint { + + public final static String EB_NEWSFRAGMENT_TAG = "NewsWrapperFragment"; + + private SearchToolbarFragment mSearchToolbarFragment; + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mSearchToolbarFragment = new SearchToolbarFragment(); + } + + @Override + protected int getLayoutId() { + return R.layout.fragment_wrapper_toolbar; + } + + @Override + public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + getChildFragmentManager().beginTransaction() + .replace(R.id.wrapper_toolbar, mSearchToolbarFragment) + .replace(R.id.wrapper_main_content, new NewsFragment()).commitAllowingStateLoss(); + } + + @Override + public void setHint(ArrayList hintList) { + if (mSearchToolbarFragment != null) { + mSearchToolbarFragment.setHint(hintList); + } + } + +} + diff --git a/app/src/main/java/com/gh/gamecenter/personal/ConcernFragment.java b/app/src/main/java/com/gh/gamecenter/personal/ConcernFragment.java index ecd779a9cc..312ed76d2a 100644 --- a/app/src/main/java/com/gh/gamecenter/personal/ConcernFragment.java +++ b/app/src/main/java/com/gh/gamecenter/personal/ConcernFragment.java @@ -8,7 +8,7 @@ import android.view.View; import android.widget.LinearLayout; import android.widget.TextView; -import com.gh.base.BaseFragment; +import com.gh.base.fragment.BaseFragment; import com.gh.common.util.DownloadItemUtils; import com.gh.common.view.VerticalItemDecoration; import com.gh.download.DataWatcher; diff --git a/app/src/main/java/com/gh/gamecenter/personal/InstallFragment.java b/app/src/main/java/com/gh/gamecenter/personal/InstallFragment.java index e24e881765..6c2b577dcb 100644 --- a/app/src/main/java/com/gh/gamecenter/personal/InstallFragment.java +++ b/app/src/main/java/com/gh/gamecenter/personal/InstallFragment.java @@ -10,7 +10,7 @@ import android.view.View; import android.widget.LinearLayout; import android.widget.TextView; -import com.gh.base.BaseFragment; +import com.gh.base.fragment.BaseFragment; import com.gh.common.util.DialogUtils; import com.gh.common.util.DownloadItemUtils; import com.gh.common.view.SwipeLayout; diff --git a/app/src/main/java/com/gh/gamecenter/personal/PersonalFragment.java b/app/src/main/java/com/gh/gamecenter/personal/PersonalFragment.java index 375af455dd..a4930ee705 100644 --- a/app/src/main/java/com/gh/gamecenter/personal/PersonalFragment.java +++ b/app/src/main/java/com/gh/gamecenter/personal/PersonalFragment.java @@ -26,7 +26,7 @@ import android.widget.TextView; import android.widget.Toast; import com.facebook.drawee.view.SimpleDraweeView; -import com.gh.base.BaseFragment; +import com.gh.base.fragment.BaseFragment; import com.gh.common.constant.Config; import com.gh.common.util.DataCollectionUtils; import com.gh.common.util.DataUtils; diff --git a/app/src/main/java/com/gh/gamecenter/search/SearchGameDetailFragment.java b/app/src/main/java/com/gh/gamecenter/search/SearchGameDetailFragment.java index e79cc8a236..be6191004f 100644 --- a/app/src/main/java/com/gh/gamecenter/search/SearchGameDetailFragment.java +++ b/app/src/main/java/com/gh/gamecenter/search/SearchGameDetailFragment.java @@ -13,7 +13,7 @@ import android.view.ViewTreeObserver; import android.widget.LinearLayout; import android.widget.TextView; -import com.gh.base.BaseFragment; +import com.gh.base.fragment.BaseFragment; import com.gh.common.util.DisplayUtils; import com.gh.common.util.DownloadItemUtils; import com.gh.common.view.VerticalItemDecoration; diff --git a/app/src/main/java/com/gh/gamecenter/search/SearchGameListFragment.java b/app/src/main/java/com/gh/gamecenter/search/SearchGameListFragment.java index f9f1de6d34..69224520ff 100644 --- a/app/src/main/java/com/gh/gamecenter/search/SearchGameListFragment.java +++ b/app/src/main/java/com/gh/gamecenter/search/SearchGameListFragment.java @@ -13,7 +13,7 @@ import android.view.ViewTreeObserver; import android.widget.LinearLayout; import android.widget.TextView; -import com.gh.base.BaseFragment; +import com.gh.base.fragment.BaseFragment; import com.gh.common.util.DisplayUtils; import com.gh.common.util.DownloadItemUtils; import com.gh.common.view.VerticalItemDecoration; diff --git a/app/src/main/java/com/gh/gamecenter/search/SearchHistoryFragment.java b/app/src/main/java/com/gh/gamecenter/search/SearchHistoryFragment.java index 70cdc97b81..90ec0114a0 100644 --- a/app/src/main/java/com/gh/gamecenter/search/SearchHistoryFragment.java +++ b/app/src/main/java/com/gh/gamecenter/search/SearchHistoryFragment.java @@ -9,7 +9,7 @@ import android.view.ViewGroup; import android.widget.RelativeLayout; import android.widget.TextView; -import com.gh.base.BaseFragment; +import com.gh.base.fragment.BaseFragment; import com.gh.common.util.DialogUtils; import com.gh.common.util.DisplayUtils; import com.gh.gamecenter.R; diff --git a/app/src/main/java/com/gh/gamecenter/subject/SubjectFragment.java b/app/src/main/java/com/gh/gamecenter/subject/SubjectFragment.java index 42644d190c..6c773311c4 100644 --- a/app/src/main/java/com/gh/gamecenter/subject/SubjectFragment.java +++ b/app/src/main/java/com/gh/gamecenter/subject/SubjectFragment.java @@ -10,7 +10,7 @@ import android.view.View; import android.widget.LinearLayout; import com.gc.materialdesign.views.ProgressBarCircularIndeterminate; -import com.gh.base.BaseFragment; +import com.gh.base.fragment.BaseFragment; import com.gh.common.util.ApkActiveUtils; import com.gh.common.util.DownloadItemUtils; import com.gh.common.util.EntranceUtils; @@ -26,7 +26,7 @@ import com.gh.gamecenter.eventbus.EBNetworkState; import com.gh.gamecenter.eventbus.EBPackage; import com.gh.gamecenter.eventbus.EBReuse; import com.gh.gamecenter.eventbus.EBUISwitch; -import com.gh.gamecenter.news.NewsFragment; +import com.gh.gamecenter.news.NewsWrapperFragment; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; @@ -108,6 +108,7 @@ public class SubjectFragment extends BaseFragment { mName = arguments.getString("name"); mIsOrder = arguments.getBoolean("order"); mType = arguments.getString("type"); + //TODO ????? order 是 boolean mOrder = arguments.getString("order"); mTagType = arguments.getString("tagType"); mEntrance = arguments.getString(EntranceUtils.KEY_ENTRANCE); @@ -287,7 +288,7 @@ public class SubjectFragment extends BaseFragment { // 资讯Fragment界面切换事件 @Subscribe(threadMode = ThreadMode.MAIN) public void onEventMainThread(EBUISwitch busNine) { - if (NewsFragment.EB_NEWSFRAGMENT_TAG.equals(busNine.getFrom())) { + if (NewsWrapperFragment.EB_NEWSFRAGMENT_TAG.equals(busNine.getFrom())) { if (busNine.getPosition() == 0) { if (subject_pb_loading.getVisibility() == View.VISIBLE) { adapter.initList(1); diff --git a/app/src/main/java/com/gh/gamecenter/subject/SubjectTileFragment.java b/app/src/main/java/com/gh/gamecenter/subject/SubjectTileFragment.java index 2a5135d7f2..5cbf1817f7 100644 --- a/app/src/main/java/com/gh/gamecenter/subject/SubjectTileFragment.java +++ b/app/src/main/java/com/gh/gamecenter/subject/SubjectTileFragment.java @@ -17,7 +17,7 @@ import android.view.View; import android.view.ViewGroup; import android.widget.TextView; -import com.gh.base.BaseFragment; +import com.gh.base.fragment.BaseFragment; import com.gh.common.util.DisplayUtils; import com.gh.common.util.StringUtils; import com.gh.gamecenter.R; diff --git a/app/src/main/java/com/gh/gamecenter/wenda/WenDaFragment.java b/app/src/main/java/com/gh/gamecenter/wenda/WenDaFragment.java index 01d0913294..cba995b85d 100644 --- a/app/src/main/java/com/gh/gamecenter/wenda/WenDaFragment.java +++ b/app/src/main/java/com/gh/gamecenter/wenda/WenDaFragment.java @@ -1,6 +1,6 @@ //package com.gh.gamecenter.wenda; // -//import com.gh.base.BaseFragment; +//import com.gh.base.fragment.BaseFragment; //import com.gh.gamecenter.eventbus.EBNetworkState; // //import org.greenrobot.eventbus.Subscribe; diff --git a/app/src/main/res/drawable/selector_ic_game.xml b/app/src/main/res/drawable/selector_ic_game.xml new file mode 100644 index 0000000000..66ed99c36d --- /dev/null +++ b/app/src/main/res/drawable/selector_ic_game.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_ic_message.xml b/app/src/main/res/drawable/selector_ic_message.xml new file mode 100644 index 0000000000..f5eafa020f --- /dev/null +++ b/app/src/main/res/drawable/selector_ic_message.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_ic_news.xml b/app/src/main/res/drawable/selector_ic_news.xml new file mode 100644 index 0000000000..087dc331c8 --- /dev/null +++ b/app/src/main/res/drawable/selector_ic_news.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_ic_user.xml b/app/src/main/res/drawable/selector_ic_user.xml new file mode 100644 index 0000000000..e461a4ace1 --- /dev/null +++ b/app/src/main/res/drawable/selector_ic_user.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_libao.xml b/app/src/main/res/layout/activity_libao.xml index a0e2dfb1e2..ecf17def08 100644 --- a/app/src/main/res/layout/activity_libao.xml +++ b/app/src/main/res/layout/activity_libao.xml @@ -68,7 +68,7 @@ android:layout_width = "match_parent" android:layout_height = "match_parent" > - - + android:layout_height = "match_parent" > - + - + android:layout_height = "match_parent" + android:layout_below = "@+id/home_actionbar" > - + android:layout_height = "wrap_content" /> - + - + - + - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/fragment_main.xml similarity index 76% rename from app/src/main/res/layout/activity_main.xml rename to app/src/main/res/layout/fragment_main.xml index 2bf2e2e948..13894d43ca 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/fragment_main.xml @@ -2,20 +2,20 @@ android:layout_width = "match_parent" android:layout_height = "match_parent" > - + android:layout_above = "@id/lightgame_tab_container" /> - - + android:src = "@drawable/selector_ic_game" /> - - + + - + android:src = "@drawable/selector_ic_news" /> - + - - + android:src = "@drawable/selector_ic_message" /> - + - - - + android:src = "@drawable/selector_ic_user" /> - + diff --git a/app/src/main/res/layout/fragment_message.xml b/app/src/main/res/layout/fragment_message.xml index e48d4ab602..e6963c2fb1 100644 --- a/app/src/main/res/layout/fragment_message.xml +++ b/app/src/main/res/layout/fragment_message.xml @@ -7,12 +7,12 @@ - - - - + diff --git a/app/src/main/res/layout/fragment_news.xml b/app/src/main/res/layout/fragment_news.xml index b330b5d77e..c19595ca6e 100644 --- a/app/src/main/res/layout/fragment_news.xml +++ b/app/src/main/res/layout/fragment_news.xml @@ -1,13 +1,74 @@ - - + - + - + - \ No newline at end of file + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_news_slidebar.xml b/app/src/main/res/layout/fragment_news_slidebar.xml deleted file mode 100644 index af88ac8797..0000000000 --- a/app/src/main/res/layout/fragment_news_slidebar.xml +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_page.xml b/app/src/main/res/layout/fragment_page.xml deleted file mode 100644 index 07d7c8856a..0000000000 --- a/app/src/main/res/layout/fragment_page.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_toolbar.xml b/app/src/main/res/layout/fragment_toolbar.xml new file mode 100644 index 0000000000..fd642c1410 --- /dev/null +++ b/app/src/main/res/layout/fragment_toolbar.xml @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_wrapper_toolbar.xml b/app/src/main/res/layout/fragment_wrapper_toolbar.xml new file mode 100644 index 0000000000..426052332d --- /dev/null +++ b/app/src/main/res/layout/fragment_wrapper_toolbar.xml @@ -0,0 +1,18 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/game_viewpager_item.xml b/app/src/main/res/layout/game_viewpager_item.xml index ed85df3471..f4897f94fb 100644 --- a/app/src/main/res/layout/game_viewpager_item.xml +++ b/app/src/main/res/layout/game_viewpager_item.xml @@ -1,11 +1,20 @@ - + android:layout_height = "wrap_content" + android:orientation = "vertical" + app:fractionValue = "0.65625" + app:layout_heightPercent = "65.625%" + app:measureBy = "width" > + - + + android:layout_height = "wrap_content" + app:fractionValue = "0.4375" + app:measureBy = "width" > + android:layout_gravity = "bottom|right" + android:gravity = "center" + android:orientation = "horizontal" + android:paddingBottom = "6dp" + android:paddingLeft = "10dp" + android:paddingRight = "10dp" /> - + - + + android:layout_height = "wrap_content" + android:layout_gravity = "bottom" + app:fractionValue = "0.21875" + app:measureBy = "width" > + android:textSize = "14sp" /> + android:paddingTop = "2dp" /> - + - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/gamedetail_body.xml b/app/src/main/res/layout/gamedetail_body.xml index 85b556e455..5cbbd1104b 100644 --- a/app/src/main/res/layout/gamedetail_body.xml +++ b/app/src/main/res/layout/gamedetail_body.xml @@ -100,7 +100,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 9ca90332c4..b0adb442b3 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -8,7 +8,7 @@ 9dp - 48dp + 55dp 72dp diff --git a/libraries/EventBus/libs/EventBus-2.4.0.jar b/libraries/EventBus/libs/EventBus-2.4.0.jar deleted file mode 100644 index 106ed5b53d..0000000000 Binary files a/libraries/EventBus/libs/EventBus-2.4.0.jar and /dev/null differ diff --git a/libraries/EventBus/src/main/AndroidManifest.xml b/libraries/EventBus/src/main/AndroidManifest.xml deleted file mode 100644 index 4df1b5b2fd..0000000000 --- a/libraries/EventBus/src/main/AndroidManifest.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - diff --git a/libraries/EventBus/build.gradle b/libraries/LGLibrary/build.gradle similarity index 69% rename from libraries/EventBus/build.gradle rename to libraries/LGLibrary/build.gradle index 89d074a4f1..cc778bafa7 100644 --- a/libraries/EventBus/build.gradle +++ b/libraries/LGLibrary/build.gradle @@ -2,6 +2,9 @@ apply plugin: 'com.android.library' dependencies { compile fileTree(dir: 'libs', exclude: 'android-support-*.jar', include: '*.jar') + provided libs.supportV4 + provided libs.supportAppCompat + provided libs.supportRecyclerView } android { diff --git a/libraries/EventBus/proguard-library.txt b/libraries/LGLibrary/proguard-library.txt similarity index 63% rename from libraries/EventBus/proguard-library.txt rename to libraries/LGLibrary/proguard-library.txt index 44a1304068..f2fe1559a2 100644 --- a/libraries/EventBus/proguard-library.txt +++ b/libraries/LGLibrary/proguard-library.txt @@ -18,21 +18,3 @@ #-keepclassmembers class fqcn.of.javascript.interface.for.webview { # public *; #} - --keep class de.greenrobot.event.** {*;} --keepclassmembers class ** { - public void onEvent*(**); - void onEvent*(**); -} - --keepattributes *Annotation* -#-keepclassmembers class ** { -# @org.greenrobot.eventbus.Subscribe ; -#} --keep enum de.greenrobot.event.ThreadMode { *; } - -# Only required if you use AsyncExecutor --keepclassmembers class * extends de.greenrobot.event.util.ThrowableFailureEvent { - (java.lang.Throwable); -} - diff --git a/libraries/LGLibrary/src/main/AndroidManifest.xml b/libraries/LGLibrary/src/main/AndroidManifest.xml new file mode 100644 index 0000000000..269e0bc84d --- /dev/null +++ b/libraries/LGLibrary/src/main/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + + + diff --git a/libraries/LGLibrary/src/main/java/com/lightgame/adapter/BaseFragmentPagerAdapter.java b/libraries/LGLibrary/src/main/java/com/lightgame/adapter/BaseFragmentPagerAdapter.java new file mode 100755 index 0000000000..b852e5a473 --- /dev/null +++ b/libraries/LGLibrary/src/main/java/com/lightgame/adapter/BaseFragmentPagerAdapter.java @@ -0,0 +1,53 @@ +/** + * project: OPlay + *

+ *

+ * ======================================================================== + * amend date amend user amend reason + * 2013-3-5 CsHeng + */ + +package com.lightgame.adapter; + +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentPagerAdapter; + +import java.util.List; + +/** + * 通用Fragment Page Adapter + * + * @author CsHeng + * @date 2013-3-8 + */ +public class BaseFragmentPagerAdapter extends FragmentPagerAdapter { + + List mFragments; + + // nested fragment should pass getChildFragmentManager() + private BaseFragmentPagerAdapter(FragmentManager fm, List fragments) { + super(fm); + mFragments = fragments; + } + + /** + * @param fm Pass getSupportFragmentManager() or Nested Fragment Should Pass getChildFragmentManager() + * @param fragments + * @return + */ + public static BaseFragmentPagerAdapter newInstance(FragmentManager fm, List fragments) { + return new BaseFragmentPagerAdapter(fm, fragments); + } + + @Override + public Fragment getItem(int position) { + return mFragments.get(position); + } + + @Override + public int getCount() { + return mFragments.size(); + } + +} diff --git a/libraries/LGLibrary/src/main/java/com/lightgame/listeners/IllegalAttachException.java b/libraries/LGLibrary/src/main/java/com/lightgame/listeners/IllegalAttachException.java new file mode 100644 index 0000000000..0deb12be25 --- /dev/null +++ b/libraries/LGLibrary/src/main/java/com/lightgame/listeners/IllegalAttachException.java @@ -0,0 +1,23 @@ +package com.lightgame.listeners; + +/** + * Fragment Attach 到Activity时若不满足条件则抛出 + * Created by csheng on 15-9-29. + */ +public class IllegalAttachException extends RuntimeException { + + public IllegalAttachException() { + } + + public IllegalAttachException(String detailMessage) { + super(detailMessage); + } + + public IllegalAttachException(String detailMessage, Throwable throwable) { + super(detailMessage, throwable); + } + + public IllegalAttachException(Throwable throwable) { + super(throwable); + } +} diff --git a/libraries/LGLibrary/src/main/java/com/lightgame/listeners/OnBackPressedListener.java b/libraries/LGLibrary/src/main/java/com/lightgame/listeners/OnBackPressedListener.java new file mode 100755 index 0000000000..60d1894405 --- /dev/null +++ b/libraries/LGLibrary/src/main/java/com/lightgame/listeners/OnBackPressedListener.java @@ -0,0 +1,9 @@ +package com.lightgame.listeners; + +/** + * Forward activity onBackPressed() events to fragment + * (If nested fragments need this, just forward again) + */ +public interface OnBackPressedListener { + public boolean onHandleBackPressed(); +} diff --git a/libraries/LGLibrary/src/main/java/com/lightgame/listeners/OnBrowserActionListener.java b/libraries/LGLibrary/src/main/java/com/lightgame/listeners/OnBrowserActionListener.java new file mode 100644 index 0000000000..b845c84dc0 --- /dev/null +++ b/libraries/LGLibrary/src/main/java/com/lightgame/listeners/OnBrowserActionListener.java @@ -0,0 +1,13 @@ +package com.lightgame.listeners; + +/** + * @author CsHeng + * @Date 14-10-16 + * @Time 下午9:11 + */ +public interface OnBrowserActionListener { + public void onRotateImage(); + + public void onSaveImage(); +} + diff --git a/libraries/LGLibrary/src/main/java/com/lightgame/listeners/UpdateableFragment.java b/libraries/LGLibrary/src/main/java/com/lightgame/listeners/UpdateableFragment.java new file mode 100755 index 0000000000..81b205a531 --- /dev/null +++ b/libraries/LGLibrary/src/main/java/com/lightgame/listeners/UpdateableFragment.java @@ -0,0 +1,12 @@ +package com.lightgame.listeners; + +import java.util.List; + +/** + * @author: CsHeng (csheng1204[at]gmail[dot]com) + * Date: 13-12-24 + * Time: 下午2:52 + */ +public interface UpdateableFragment { + public void onFragmentNeedsUpdate(List listData); +} diff --git a/libraries/LGLibrary/src/main/java/com/lightgame/view/CheckableImageView.java b/libraries/LGLibrary/src/main/java/com/lightgame/view/CheckableImageView.java new file mode 100644 index 0000000000..5a3afd29ae --- /dev/null +++ b/libraries/LGLibrary/src/main/java/com/lightgame/view/CheckableImageView.java @@ -0,0 +1,42 @@ +package com.lightgame.view; + +import android.content.Context; +import android.support.v7.widget.AppCompatImageView; +import android.util.AttributeSet; +import android.widget.Checkable; + +public class CheckableImageView extends AppCompatImageView implements Checkable { + + private boolean mChecked; + private static final int[] CHECKED_STATE_SET = { + android.R.attr.state_checked + }; + + public CheckableImageView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + @Override + public int[] onCreateDrawableState(int extraSpace) { + final int[] drawableState = super.onCreateDrawableState(extraSpace + 1); + if (isChecked()) { + mergeDrawableStates(drawableState, CHECKED_STATE_SET); + } + return drawableState; + } + + public void toggle() { + setChecked(!mChecked); + } + + public boolean isChecked() { + return mChecked; + } + + public void setChecked(boolean checked) { + if (mChecked != checked) { + mChecked = checked; + refreshDrawableState(); + } + } +} \ No newline at end of file diff --git a/libraries/LGLibrary/src/main/java/com/lightgame/view/CheckableLinearLayout.java b/libraries/LGLibrary/src/main/java/com/lightgame/view/CheckableLinearLayout.java new file mode 100644 index 0000000000..07edc46f66 --- /dev/null +++ b/libraries/LGLibrary/src/main/java/com/lightgame/view/CheckableLinearLayout.java @@ -0,0 +1,57 @@ +package com.lightgame.view; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Checkable; +import android.widget.LinearLayout; + +public class CheckableLinearLayout extends LinearLayout implements Checkable { + + private static final int[] CHECKED_STATE_SET = {android.R.attr.state_checked}; + + private boolean mChecked = false; + + public CheckableLinearLayout(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public boolean isChecked() { + return mChecked; + } + + public void setChecked(boolean b) { + if (b != mChecked) { + mChecked = b; + refreshDrawableState(); + setChildChecked(this, b); + } + } + + private void setChildChecked(ViewGroup vg, boolean checked) { + for (int i = 0, size = vg.getChildCount(); i < size; i++) { + final View child = vg.getChildAt(i); + if (child instanceof Checkable) { + ((Checkable) child).setChecked(checked); + } + if (child instanceof ViewGroup) { + setChildChecked((ViewGroup) child, checked); + } + } + } + + public void toggle() { + setChecked(!mChecked); + } + + @Override + public int[] onCreateDrawableState(int extraSpace) { + final int[] drawableState = super.onCreateDrawableState(extraSpace + 1); + if (isChecked()) { + mergeDrawableStates(drawableState, CHECKED_STATE_SET); + } + return drawableState; + } + +} \ No newline at end of file diff --git a/libraries/LGLibrary/src/main/java/com/lightgame/view/DoubleTapTextView.java b/libraries/LGLibrary/src/main/java/com/lightgame/view/DoubleTapTextView.java new file mode 100644 index 0000000000..df8c4d0aad --- /dev/null +++ b/libraries/LGLibrary/src/main/java/com/lightgame/view/DoubleTapTextView.java @@ -0,0 +1,69 @@ +package com.lightgame.view; + +import android.content.Context; +import android.support.v7.widget.AppCompatTextView; +import android.util.AttributeSet; +import android.view.GestureDetector; +import android.view.MotionEvent; + +/** + * @author CsHeng + * @Date 14-10-29 + * @Time 下午3:16 + */ +public class DoubleTapTextView extends AppCompatTextView { + + private OnDoubleTapListener mOnDoubleTapListener; + private GestureDetector mGestureDetector; + + public DoubleTapTextView(Context context) { + super(context); + mGestureDetector = new GestureDetector(getContext(), new GestureListener()); + } + + public DoubleTapTextView(Context context, AttributeSet attrs) { + super(context, attrs); + mGestureDetector = new GestureDetector(getContext(), new GestureListener()); + } + + public DoubleTapTextView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + mGestureDetector = new GestureDetector(getContext(), new GestureListener()); + } + + public void setOnDoubleTapListener(OnDoubleTapListener onDoubleTapListener) { + mOnDoubleTapListener = onDoubleTapListener; + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + return mGestureDetector.onTouchEvent(event); + } + + private class GestureListener extends GestureDetector.SimpleOnGestureListener { + + @Override + public boolean onDown(MotionEvent e) { + return true; + } + + @Override + public boolean onDoubleTap(MotionEvent e) { + if (mOnDoubleTapListener != null) { + return mOnDoubleTapListener.onDoubleTap(); + } + return false; + } + } + + /** + * @author CsHeng + * @Date 14-10-29 + * @Time 下午3:15 + */ + public interface OnDoubleTapListener { + boolean onDoubleTap(); + } + +} + diff --git a/app/src/main/java/com/gh/common/view/NoScrollableViewPager.java b/libraries/LGLibrary/src/main/java/com/lightgame/view/NoScrollableViewPager.java similarity index 70% rename from app/src/main/java/com/gh/common/view/NoScrollableViewPager.java rename to libraries/LGLibrary/src/main/java/com/lightgame/view/NoScrollableViewPager.java index 0218c116bd..2aa022f254 100644 --- a/app/src/main/java/com/gh/common/view/NoScrollableViewPager.java +++ b/libraries/LGLibrary/src/main/java/com/lightgame/view/NoScrollableViewPager.java @@ -1,4 +1,4 @@ -package com.gh.common.view; +package com.lightgame.view; import android.content.Context; import android.support.v4.view.ViewPager; @@ -11,30 +11,30 @@ import android.view.MotionEvent; */ public class NoScrollableViewPager extends ViewPager { - private boolean isScrollable; + private boolean mIsScrollable; public NoScrollableViewPager(Context context) { super(context); - isScrollable = true; + mIsScrollable = true; } public NoScrollableViewPager(Context context, AttributeSet attrs) { super(context, attrs); - isScrollable = true; - + mIsScrollable = true; } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { - return isScrollable && super.onInterceptTouchEvent(ev); + return mIsScrollable && super.onInterceptTouchEvent(ev); } @Override public boolean onTouchEvent(MotionEvent ev) { - return isScrollable && super.onTouchEvent(ev); + return mIsScrollable && super.onTouchEvent(ev); } public void setScrollable(boolean scrollable) { - isScrollable = scrollable; + mIsScrollable = scrollable; } + } diff --git a/libraries/LGLibrary/src/main/java/com/lightgame/view/imageview/AspectRatioImageView.java b/libraries/LGLibrary/src/main/java/com/lightgame/view/imageview/AspectRatioImageView.java new file mode 100755 index 0000000000..ba99a7028e --- /dev/null +++ b/libraries/LGLibrary/src/main/java/com/lightgame/view/imageview/AspectRatioImageView.java @@ -0,0 +1,73 @@ +package com.lightgame.view.imageview; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.drawable.Drawable; +import android.support.v7.widget.AppCompatImageView; +import android.util.AttributeSet; + +import com.lightgame.R; + + +/** + * 按照宽度适配,高度保持比例即可 + * + * @author CsHeng + * @date 2013-3-13 + */ +public class AspectRatioImageView extends AppCompatImageView { + + private boolean mMeasureByHeight = false; // default width + private float mFraction = 1f;// default square + + public AspectRatioImageView(Context context) { + super(context); + } + + public AspectRatioImageView(Context context, AttributeSet attrs) { + super(context, attrs); + TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ScaleView); + int enumV = a.getInt(R.styleable.ScaleView_measureBy, 0); + mMeasureByHeight = enumV != 0; + mFraction = a.getFloat(R.styleable.ScaleView_fractionValue, mFraction); + a.recycle(); + } + + public AspectRatioImageView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ScaleView); + int enumV = a.getInt(R.styleable.ScaleView_measureBy, 0); + mMeasureByHeight = enumV != 0; + mFraction = a.getFloat(R.styleable.ScaleView_fractionValue, mFraction); + a.recycle(); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + Drawable drawable = getDrawable(); + if (drawable != null) { + if (mMeasureByHeight) { + int height = MeasureSpec.getSize(heightMeasureSpec); + int dih = drawable.getIntrinsicHeight(); + if (dih > 0) { + int width = height * drawable.getIntrinsicWidth() / dih; + setMeasuredDimension(width, height); + } else { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + } + } else { + int width = MeasureSpec.getSize(widthMeasureSpec); + int diw = drawable.getIntrinsicWidth(); + if (diw > 0) { + int height = width * drawable.getIntrinsicHeight() / diw; + setMeasuredDimension(width, height); + } else { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + } + } + } else { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + } + + } +} diff --git a/libraries/LGLibrary/src/main/java/com/lightgame/view/imageview/RoundedDrawable.java b/libraries/LGLibrary/src/main/java/com/lightgame/view/imageview/RoundedDrawable.java new file mode 100755 index 0000000000..24ffe3901e --- /dev/null +++ b/libraries/LGLibrary/src/main/java/com/lightgame/view/imageview/RoundedDrawable.java @@ -0,0 +1,366 @@ +package com.lightgame.view.imageview; + +import android.content.res.ColorStateList; +import android.graphics.Bitmap; +import android.graphics.Bitmap.Config; +import android.graphics.BitmapShader; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.ColorFilter; +import android.graphics.Matrix; +import android.graphics.Paint; +import android.graphics.PixelFormat; +import android.graphics.Rect; +import android.graphics.RectF; +import android.graphics.Shader; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.LayerDrawable; +import android.util.Log; +import android.widget.ImageView.ScaleType; + +@SuppressWarnings("UnusedDeclaration") +public class RoundedDrawable extends Drawable { + + public static final String TAG = "RoundedDrawable"; + public static final int DEFAULT_BORDER_COLOR = Color.BLACK; + private ColorStateList mBorderColor = ColorStateList.valueOf(DEFAULT_BORDER_COLOR); + private final RectF mBounds = new RectF(); + private final RectF mDrawableRect = new RectF(); + private final RectF mBitmapRect = new RectF(); + private final BitmapShader mBitmapShader; + private final Paint mBitmapPaint; + private final int mBitmapWidth; + private final int mBitmapHeight; + private final RectF mBorderRect = new RectF(); + private final Paint mBorderPaint; + private final Matrix mShaderMatrix = new Matrix(); + private float mCornerRadius = 0; + private boolean mOval = false; + private float mBorderWidth = 0; + private ScaleType mScaleType = ScaleType.FIT_CENTER; + + public RoundedDrawable(Bitmap bitmap) { + + mBitmapWidth = bitmap.getWidth(); + mBitmapHeight = bitmap.getHeight(); + mBitmapRect.set(0, 0, mBitmapWidth, mBitmapHeight); + + mBitmapShader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); + mBitmapShader.setLocalMatrix(mShaderMatrix); + + mBitmapPaint = new Paint(); + mBitmapPaint.setStyle(Paint.Style.FILL); + mBitmapPaint.setAntiAlias(true); + mBitmapPaint.setShader(mBitmapShader); + + mBorderPaint = new Paint(); + mBorderPaint.setStyle(Paint.Style.STROKE); + mBorderPaint.setAntiAlias(true); + mBorderPaint.setColor(mBorderColor.getColorForState(getState(), DEFAULT_BORDER_COLOR)); + mBorderPaint.setStrokeWidth(mBorderWidth); + } + + public static RoundedDrawable fromBitmap(Bitmap bitmap) { + if (bitmap != null) { + return new RoundedDrawable(bitmap); + } else { + return null; + } + } + + public static Drawable fromDrawable(Drawable drawable) { + if (drawable != null) { + if (drawable instanceof RoundedDrawable) { + // just return if it's already a RoundedDrawable + return drawable; + } else if (drawable instanceof LayerDrawable) { + LayerDrawable ld = (LayerDrawable) drawable; + int num = ld.getNumberOfLayers(); + + // loop through layers to and change to RoundedDrawables if possible + for (int i = 0; i < num; i++) { + Drawable d = ld.getDrawable(i); + ld.setDrawableByLayerId(ld.getId(i), fromDrawable(d)); + } + return ld; + } + + // try to get a bitmap from the drawable and + Bitmap bm = drawableToBitmap(drawable); + if (bm != null) { + return new RoundedDrawable(bm); + } else { + Log.w(TAG, "Failed to create bitmap from drawable!"); + } + } + return drawable; + } + + public static Bitmap drawableToBitmap(Drawable drawable) { + if (drawable instanceof BitmapDrawable) { + return ((BitmapDrawable) drawable).getBitmap(); + } + + Bitmap bitmap; + int width = Math.max(drawable.getIntrinsicWidth(), 1); + int height = Math.max(drawable.getIntrinsicHeight(), 1); + try { + bitmap = Bitmap.createBitmap(width, height, Config.ARGB_8888); + Canvas canvas = new Canvas(bitmap); + drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); + drawable.draw(canvas); + } catch (Exception e) { + e.printStackTrace(); + bitmap = null; + } + + return bitmap; + } + + private void updateShaderMatrix() { + float scale; + float dx; + float dy; + + switch (mScaleType) { + case CENTER: + mBorderRect.set(mBounds); + mBorderRect.inset((mBorderWidth) / 2, (mBorderWidth) / 2); + + mShaderMatrix.set(null); + mShaderMatrix.setTranslate((int) ((mBorderRect.width() - mBitmapWidth) * 0.5f + 0.5f), + (int) ((mBorderRect.height() - mBitmapHeight) * 0.5f + 0.5f)); + break; + + case CENTER_CROP: + mBorderRect.set(mBounds); + mBorderRect.inset((mBorderWidth) / 2, (mBorderWidth) / 2); + + mShaderMatrix.set(null); + + dx = 0; + dy = 0; + + if (mBitmapWidth * mBorderRect.height() > mBorderRect.width() * mBitmapHeight) { + scale = mBorderRect.height() / (float) mBitmapHeight; + dx = (mBorderRect.width() - mBitmapWidth * scale) * 0.5f; + } else { + scale = mBorderRect.width() / (float) mBitmapWidth; + dy = (mBorderRect.height() - mBitmapHeight * scale) * 0.5f; + } + + mShaderMatrix.setScale(scale, scale); + mShaderMatrix.postTranslate((int) (dx + 0.5f) + mBorderWidth, + (int) (dy + 0.5f) + mBorderWidth); + break; + + case CENTER_INSIDE: + mShaderMatrix.set(null); + + if (mBitmapWidth <= mBounds.width() && mBitmapHeight <= mBounds.height()) { + scale = 1.0f; + } else { + scale = Math.min(mBounds.width() / (float) mBitmapWidth, + mBounds.height() / (float) mBitmapHeight); + } + + dx = (int) ((mBounds.width() - mBitmapWidth * scale) * 0.5f + 0.5f); + dy = (int) ((mBounds.height() - mBitmapHeight * scale) * 0.5f + 0.5f); + + mShaderMatrix.setScale(scale, scale); + mShaderMatrix.postTranslate(dx, dy); + + mBorderRect.set(mBitmapRect); + mShaderMatrix.mapRect(mBorderRect); + mBorderRect.inset((mBorderWidth) / 2, (mBorderWidth) / 2); + mShaderMatrix.setRectToRect(mBitmapRect, mBorderRect, Matrix.ScaleToFit.FILL); + break; + + default: + case FIT_CENTER: + mBorderRect.set(mBitmapRect); + mShaderMatrix.setRectToRect(mBitmapRect, mBounds, Matrix.ScaleToFit.CENTER); + mShaderMatrix.mapRect(mBorderRect); + mBorderRect.inset((mBorderWidth) / 2, (mBorderWidth) / 2); + mShaderMatrix.setRectToRect(mBitmapRect, mBorderRect, Matrix.ScaleToFit.FILL); + break; + + case FIT_END: + mBorderRect.set(mBitmapRect); + mShaderMatrix.setRectToRect(mBitmapRect, mBounds, Matrix.ScaleToFit.END); + mShaderMatrix.mapRect(mBorderRect); + mBorderRect.inset((mBorderWidth) / 2, (mBorderWidth) / 2); + mShaderMatrix.setRectToRect(mBitmapRect, mBorderRect, Matrix.ScaleToFit.FILL); + break; + + case FIT_START: + mBorderRect.set(mBitmapRect); + mShaderMatrix.setRectToRect(mBitmapRect, mBounds, Matrix.ScaleToFit.START); + mShaderMatrix.mapRect(mBorderRect); + mBorderRect.inset((mBorderWidth) / 2, (mBorderWidth) / 2); + mShaderMatrix.setRectToRect(mBitmapRect, mBorderRect, Matrix.ScaleToFit.FILL); + break; + + case FIT_XY: + mBorderRect.set(mBounds); + mBorderRect.inset((mBorderWidth) / 2, (mBorderWidth) / 2); + mShaderMatrix.set(null); + mShaderMatrix.setRectToRect(mBitmapRect, mBorderRect, Matrix.ScaleToFit.FILL); + break; + } + + mDrawableRect.set(mBorderRect); + mBitmapShader.setLocalMatrix(mShaderMatrix); + } + + @Override + public void draw(Canvas canvas) { + + if (mOval) { + if (mBorderWidth > 0) { + canvas.drawOval(mDrawableRect, mBitmapPaint); + canvas.drawOval(mBorderRect, mBorderPaint); + } else { + canvas.drawOval(mDrawableRect, mBitmapPaint); + } + } else { + if (mBorderWidth > 0) { + canvas.drawRoundRect(mDrawableRect, Math.max(mCornerRadius, 0), + Math.max(mCornerRadius, 0), mBitmapPaint); + canvas.drawRoundRect(mBorderRect, mCornerRadius, mCornerRadius, mBorderPaint); + } else { + canvas.drawRoundRect(mDrawableRect, mCornerRadius, mCornerRadius, mBitmapPaint); + } + } + } + + @Override + public void setDither(boolean dither) { + mBitmapPaint.setDither(dither); + invalidateSelf(); + } + + @Override + public void setFilterBitmap(boolean filter) { + mBitmapPaint.setFilterBitmap(filter); + invalidateSelf(); + } + + @Override + public void setAlpha(int alpha) { + mBitmapPaint.setAlpha(alpha); + invalidateSelf(); + } + + @Override + public void setColorFilter(ColorFilter cf) { + mBitmapPaint.setColorFilter(cf); + invalidateSelf(); + } + + @Override + public boolean isStateful() { + return mBorderColor.isStateful(); + } + + @Override + public int getOpacity() { + return PixelFormat.TRANSLUCENT; + } + + @Override + protected boolean onStateChange(int[] state) { + int newColor = mBorderColor.getColorForState(state, 0); + if (mBorderPaint.getColor() != newColor) { + mBorderPaint.setColor(newColor); + return true; + } else { + return super.onStateChange(state); + } + } + + @Override + protected void onBoundsChange(Rect bounds) { + super.onBoundsChange(bounds); + + mBounds.set(bounds); + + updateShaderMatrix(); + } + + @Override + public int getIntrinsicWidth() { + return mBitmapWidth; + } + + @Override + public int getIntrinsicHeight() { + return mBitmapHeight; + } + + public float getCornerRadius() { + return mCornerRadius; + } + + public RoundedDrawable setCornerRadius(float radius) { + mCornerRadius = radius; + return this; + } + + public float getBorderWidth() { + return mBorderWidth; + } + + public RoundedDrawable setBorderWidth(int width) { + mBorderWidth = width; + mBorderPaint.setStrokeWidth(mBorderWidth); + return this; + } + + public int getBorderColor() { + return mBorderColor.getDefaultColor(); + } + + public RoundedDrawable setBorderColor(int color) { + return setBorderColors(ColorStateList.valueOf(color)); + } + + public ColorStateList getBorderColors() { + return mBorderColor; + } + + public RoundedDrawable setBorderColors(ColorStateList colors) { + mBorderColor = colors != null ? colors : ColorStateList.valueOf(0); + mBorderPaint.setColor(mBorderColor.getColorForState(getState(), DEFAULT_BORDER_COLOR)); + return this; + } + + public boolean isOval() { + return mOval; + } + + public RoundedDrawable setOval(boolean oval) { + mOval = oval; + return this; + } + + public ScaleType getScaleType() { + return mScaleType; + } + + public RoundedDrawable setScaleType(ScaleType scaleType) { + if (scaleType == null) { + scaleType = ScaleType.FIT_CENTER; + } + if (mScaleType != scaleType) { + mScaleType = scaleType; + updateShaderMatrix(); + } + return this; + } + + public Bitmap toBitmap() { + return drawableToBitmap(this); + } +} diff --git a/libraries/LGLibrary/src/main/java/com/lightgame/view/imageview/RoundedImageView.java b/libraries/LGLibrary/src/main/java/com/lightgame/view/imageview/RoundedImageView.java new file mode 100755 index 0000000000..a74e174dbd --- /dev/null +++ b/libraries/LGLibrary/src/main/java/com/lightgame/view/imageview/RoundedImageView.java @@ -0,0 +1,323 @@ +package com.lightgame.view.imageview; + +import android.content.Context; +import android.content.res.ColorStateList; +import android.content.res.Resources; +import android.content.res.TypedArray; +import android.graphics.Bitmap; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.LayerDrawable; +import android.net.Uri; +import android.support.v7.widget.AppCompatImageView; +import android.util.AttributeSet; +import android.util.Log; + +import com.lightgame.R; + + +@SuppressWarnings("UnusedDeclaration") +public class RoundedImageView extends AppCompatImageView { + + public static final String TAG = "RoundedImageView"; + public static final int DEFAULT_RADIUS = 0; + private int mCornerRadius = DEFAULT_RADIUS; + public static final int DEFAULT_BORDER_WIDTH = 0; + private int mBorderWidth = DEFAULT_BORDER_WIDTH; + private static final ScaleType[] SCALE_TYPES = { + ScaleType.MATRIX, + ScaleType.FIT_XY, + ScaleType.FIT_START, + ScaleType.FIT_CENTER, + ScaleType.FIT_END, + ScaleType.CENTER, + ScaleType.CENTER_CROP, + ScaleType.CENTER_INSIDE + }; + private ColorStateList mBorderColor = + ColorStateList.valueOf(RoundedDrawable.DEFAULT_BORDER_COLOR); + private boolean mOval = false; + private boolean mRoundBackground = false; + + private int mResource; + private Drawable mDrawable; + private Drawable mBackgroundDrawable; + + private ScaleType mScaleType; + + public RoundedImageView(Context context) { + super(context); + } + + public RoundedImageView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public RoundedImageView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + + TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.RoundedImageView, defStyle, 0); + + int index = a.getInt(R.styleable.RoundedImageView_android_scaleType, -1); + if (index >= 0) { + setScaleType(SCALE_TYPES[index]); + } else { + // default scaletype to FIT_CENTER + setScaleType(ScaleType.FIT_CENTER); + } + + mCornerRadius = a.getDimensionPixelSize(R.styleable.RoundedImageView_corner_radius, -1); + mBorderWidth = a.getDimensionPixelSize(R.styleable.RoundedImageView_border_width, -1); + + // don't allow negative values for radius and border + if (mCornerRadius < 0) { + mCornerRadius = DEFAULT_RADIUS; + } + if (mBorderWidth < 0) { + mBorderWidth = DEFAULT_BORDER_WIDTH; + } + + mBorderColor = a.getColorStateList(R.styleable.RoundedImageView_border_color); + if (mBorderColor == null) { + mBorderColor = ColorStateList.valueOf(RoundedDrawable.DEFAULT_BORDER_COLOR); + } + + mRoundBackground = a.getBoolean(R.styleable.RoundedImageView_round_background, false); + mOval = a.getBoolean(R.styleable.RoundedImageView_is_oval, false); + + updateDrawableAttrs(); + updateBackgroundDrawableAttrs(); + + a.recycle(); + } + + @Override + public void setImageResource(int resId) { + if (mResource != resId) { + mResource = resId; + mDrawable = resolveResource(); + updateDrawableAttrs(); + super.setImageDrawable(mDrawable); + } + } + + @Override + public void setImageURI(Uri uri) { + super.setImageURI(uri); + setImageDrawable(getDrawable()); + } @Override + protected void drawableStateChanged() { + super.drawableStateChanged(); + invalidate(); + } + + @Override + public void setImageDrawable(Drawable drawable) { + mResource = 0; + mDrawable = RoundedDrawable.fromDrawable(drawable); + updateDrawableAttrs(); + super.setImageDrawable(mDrawable); + } + + @Override + public void setImageBitmap(Bitmap bm) { + mResource = 0; + mDrawable = RoundedDrawable.fromBitmap(bm); + updateDrawableAttrs(); + super.setImageDrawable(mDrawable); + } /** + * Return the current scale type in use by this ImageView. + * + * @attr ref android.R.styleable#ImageView_scaleType + * @see ScaleType + */ + @Override + public ScaleType getScaleType() { + return mScaleType; + } + + private Drawable resolveResource() { + Resources rsrc = getResources(); + if (rsrc == null) { + return null; + } + + Drawable d = null; + + if (mResource != 0) { + try { + d = rsrc.getDrawable(mResource); + } catch (Exception e) { + Log.w(TAG, "Unable to find resource: " + mResource, e); + // Don't try again. + mResource = 0; + } + } + return RoundedDrawable.fromDrawable(d); + } + + @Override + public void setBackground(Drawable background) { + setBackgroundDrawable(background); + } /** + * Controls how the image should be resized or moved to match the size + * of this ImageView. + * + * @param scaleType The desired scaling mode. + * @attr ref android.R.styleable#ImageView_scaleType + */ + @Override + public void setScaleType(ScaleType scaleType) { + if (scaleType == null) { + throw new NullPointerException(); + } + + if (mScaleType != scaleType) { + mScaleType = scaleType; + + switch (scaleType) { + case CENTER: + case CENTER_CROP: + case CENTER_INSIDE: + case FIT_CENTER: + case FIT_START: + case FIT_END: + case FIT_XY: + super.setScaleType(ScaleType.FIT_XY); + break; + default: + super.setScaleType(scaleType); + break; + } + + updateDrawableAttrs(); + updateBackgroundDrawableAttrs(); + invalidate(); + } + } + + @Override + @Deprecated + public void setBackgroundDrawable(Drawable background) { + mBackgroundDrawable = RoundedDrawable.fromDrawable(background); + updateBackgroundDrawableAttrs(); + super.setBackgroundDrawable(mBackgroundDrawable); + } + + private void updateDrawableAttrs() { + updateAttrs(mDrawable, false); + } + + private void updateBackgroundDrawableAttrs() { + updateAttrs(mBackgroundDrawable, true); + } + + private void updateAttrs(Drawable drawable, boolean background) { + if (drawable == null) { + return; + } + + if (drawable instanceof RoundedDrawable) { + ((RoundedDrawable) drawable) + .setScaleType(mScaleType) + .setCornerRadius(background && !mRoundBackground ? 0 : mCornerRadius) + .setBorderWidth(background && !mRoundBackground ? 0 : mBorderWidth) + .setBorderColors(mBorderColor) + .setOval(mOval); + } else if (drawable instanceof LayerDrawable) { + // loop through layers to and set drawable attrs + LayerDrawable ld = ((LayerDrawable) drawable); + int layers = ld.getNumberOfLayers(); + for (int i = 0; i < layers; i++) { + updateAttrs(ld.getDrawable(i), background); + } + } + } + + public int getCornerRadius() { + return mCornerRadius; + } + + public void setCornerRadius(int radius) { + if (mCornerRadius == radius) { + return; + } + + mCornerRadius = radius; + updateDrawableAttrs(); + updateBackgroundDrawableAttrs(); + } + + public int getBorderWidth() { + return mBorderWidth; + } + + public void setBorderWidth(int width) { + if (mBorderWidth == width) { + return; + } + + mBorderWidth = width; + updateDrawableAttrs(); + updateBackgroundDrawableAttrs(); + invalidate(); + } + + public int getBorderColor() { + return mBorderColor.getDefaultColor(); + } + + public void setBorderColor(int color) { + setBorderColors(ColorStateList.valueOf(color)); + } + + public ColorStateList getBorderColors() { + return mBorderColor; + } + + public void setBorderColors(ColorStateList colors) { + if (mBorderColor.equals(colors)) { + return; + } + + mBorderColor = + (colors != null) ? colors : ColorStateList.valueOf(RoundedDrawable.DEFAULT_BORDER_COLOR); + updateDrawableAttrs(); + updateBackgroundDrawableAttrs(); + if (mBorderWidth > 0) { + invalidate(); + } + } + + public boolean isOval() { + return mOval; + } + + public void setOval(boolean oval) { + mOval = oval; + updateDrawableAttrs(); + updateBackgroundDrawableAttrs(); + invalidate(); + } + + public boolean isRoundBackground() { + return mRoundBackground; + } + + public void setRoundBackground(boolean roundBackground) { + if (mRoundBackground == roundBackground) { + return; + } + + mRoundBackground = roundBackground; + updateBackgroundDrawableAttrs(); + invalidate(); + } + + + + + + + + +} diff --git a/libraries/LGLibrary/src/main/java/com/lightgame/view/imageview/RoundedTransformationBuilder.java b/libraries/LGLibrary/src/main/java/com/lightgame/view/imageview/RoundedTransformationBuilder.java new file mode 100644 index 0000000000..efabe2c00c --- /dev/null +++ b/libraries/LGLibrary/src/main/java/com/lightgame/view/imageview/RoundedTransformationBuilder.java @@ -0,0 +1,121 @@ +/* +* Copyright (C) 2015 Vincent Mi +* +* 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.lightgame.view.imageview; + +import android.content.res.ColorStateList; +import android.content.res.Resources; +import android.util.DisplayMetrics; +import android.util.TypedValue; +import android.widget.ImageView; + +public final class RoundedTransformationBuilder { + + //private final Resources mResources; + private final DisplayMetrics mDisplayMetrics; + + private float mCornerRadius = 0; + private boolean mOval = false; + private float mBorderWidth = 0; + private ColorStateList mBorderColor = + ColorStateList.valueOf(RoundedDrawable.DEFAULT_BORDER_COLOR); + private ImageView.ScaleType mScaleType = ImageView.ScaleType.FIT_CENTER; + + public RoundedTransformationBuilder() { + mDisplayMetrics = Resources.getSystem().getDisplayMetrics(); + } + + public RoundedTransformationBuilder scaleType(ImageView.ScaleType scaleType) { + mScaleType = scaleType; + return this; + } + + /** + * set corner radius in px + */ + public RoundedTransformationBuilder cornerRadius(float radiusPx) { + mCornerRadius = radiusPx; + return this; + } + + /** + * set corner radius in dip + */ + public RoundedTransformationBuilder cornerRadiusDp(float radiusDp) { + mCornerRadius = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, radiusDp, mDisplayMetrics); + return this; + } + + /** + * set border width in px + */ + public RoundedTransformationBuilder borderWidth(float widthPx) { + mBorderWidth = widthPx; + return this; + } + + /** + * set border width in dip + */ + public RoundedTransformationBuilder borderWidthDp(float widthDp) { + mBorderWidth = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, widthDp, mDisplayMetrics); + return this; + } + + + /** + * set border color + */ + public RoundedTransformationBuilder borderColor(int color) { + mBorderColor = ColorStateList.valueOf(color); + return this; + } + + public RoundedTransformationBuilder borderColor(ColorStateList colors) { + mBorderColor = colors; + return this; + } + + public RoundedTransformationBuilder oval(boolean oval) { + mOval = oval; + return this; + } + +// public Transformation build() { +// return new Transformation() { +// @Override public Bitmap transform(Bitmap source) { +// Bitmap transformed = RoundedDrawable.fromBitmap(source) +// .setScaleType(mScaleType) +// .setCornerRadius(mCornerRadius) +// .setBorderWidth(mBorderWidth) +// .setBorderColor(mBorderColor) +// .setOval(mOval) +// .toBitmap(); +// if (!source.equals(transformed)) { +// source.recycle(); +// } +// return transformed; +// } +// +// @Override public String key() { +// return "r:" + mCornerRadius +// + "b:" + mBorderWidth +// + "c:" + mBorderColor +// + "o:" + mOval; +// } +// }; +// } +} \ No newline at end of file diff --git a/libraries/LGLibrary/src/main/java/com/lightgame/view/imageview/ScaleImageView.java b/libraries/LGLibrary/src/main/java/com/lightgame/view/imageview/ScaleImageView.java new file mode 100755 index 0000000000..4bdd7b2e47 --- /dev/null +++ b/libraries/LGLibrary/src/main/java/com/lightgame/view/imageview/ScaleImageView.java @@ -0,0 +1,47 @@ +package com.lightgame.view.imageview; + +import android.content.Context; +import android.content.res.TypedArray; +import android.support.v7.widget.AppCompatImageView; +import android.util.AttributeSet; + +import com.lightgame.R; + + +/** + * 按照百分比来保持View的大小,可选以width或者height做参考系 + * + * @author CsHeng + * @date 2013-3-14 + */ +public class ScaleImageView extends AppCompatImageView { + + private boolean mMeasureByHeight = false; // default width + + private float mFraction = 1f;// default square + + public ScaleImageView(Context context, AttributeSet set) { + super(context, set); + TypedArray a = context.obtainStyledAttributes(set, R.styleable.ScaleView); + int enumV = a.getInt(R.styleable.ScaleView_measureBy, 0); + mFraction = a.getFloat(R.styleable.ScaleView_fractionValue, mFraction); + if (enumV != 0) { + mMeasureByHeight = true; + } + a.recycle(); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + int width = MeasureSpec.getSize(widthMeasureSpec); + int height = MeasureSpec.getSize(heightMeasureSpec); + if (mMeasureByHeight) { + width = (int) (height * mFraction); + } else { + height = (int) (width * mFraction); + } + setMeasuredDimension(width, height); + + } + +} diff --git a/libraries/LGLibrary/src/main/java/com/lightgame/view/imageview/ScaleRoundedImageView.java b/libraries/LGLibrary/src/main/java/com/lightgame/view/imageview/ScaleRoundedImageView.java new file mode 100755 index 0000000000..dc7dc1a0b3 --- /dev/null +++ b/libraries/LGLibrary/src/main/java/com/lightgame/view/imageview/ScaleRoundedImageView.java @@ -0,0 +1,47 @@ +package com.lightgame.view.imageview; + +import android.content.Context; +import android.content.res.TypedArray; +import android.util.AttributeSet; + +import com.lightgame.R; + + +/** + * Created with IntelliJ IDEA. + * User: CsHeng + * Date: 13-3-26 + * Time: 下午12:54 + * To change this template use File | Settings | File Templates. + */ +public class ScaleRoundedImageView extends RoundedImageView { + + private boolean mMeasureByHeight = false; // default width + + private float mFraction = 1f;// default square + + public ScaleRoundedImageView(Context context, AttributeSet set) { + super(context, set); + TypedArray a = context.obtainStyledAttributes(set, R.styleable.ScaleView); + int enumV = a.getInt(R.styleable.ScaleView_measureBy, 0); + mFraction = a.getFloat(R.styleable.ScaleView_fractionValue, mFraction); + if (enumV != 0) { + mMeasureByHeight = true; + } + a.recycle(); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + int width = MeasureSpec.getSize(widthMeasureSpec); + int height = MeasureSpec.getSize(heightMeasureSpec); + if (mMeasureByHeight) { + setMeasuredDimension((int) (height * mFraction), height); + } else { + setMeasuredDimension(width, (int) (width * mFraction)); + } + } + +} + + diff --git a/libraries/LGLibrary/src/main/java/com/lightgame/view/scale/ScaleFrameLayout.java b/libraries/LGLibrary/src/main/java/com/lightgame/view/scale/ScaleFrameLayout.java new file mode 100755 index 0000000000..aec369e112 --- /dev/null +++ b/libraries/LGLibrary/src/main/java/com/lightgame/view/scale/ScaleFrameLayout.java @@ -0,0 +1,50 @@ +package com.lightgame.view.scale; + +import android.content.Context; +import android.content.res.TypedArray; +import android.util.AttributeSet; +import android.widget.FrameLayout; + +import com.lightgame.R; + + +/** + * Created with IntelliJ IDEA. + * User: CsHeng + * Date: 13-3-15 + * Time: 下午4:38 + * To change this template use File | Settings | File Templates. + */ +public class ScaleFrameLayout extends FrameLayout { + + private boolean mMeasureByHeight = false; // default width + private float mFraction = 1f;// default square + + public ScaleFrameLayout(Context context) { + super(context); + } + + public ScaleFrameLayout(Context context, AttributeSet set) { + super(context, set); + TypedArray a = context.obtainStyledAttributes(set, R.styleable.ScaleView); + int enumV = a.getInt(R.styleable.ScaleView_measureBy, 0); + mFraction = a.getFloat(R.styleable.ScaleView_fractionValue, mFraction); + if (enumV != 0) { + mMeasureByHeight = true; + } + a.recycle(); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + int width = MeasureSpec.getSize(widthMeasureSpec); + int height = MeasureSpec.getSize(heightMeasureSpec); + if (mMeasureByHeight) { + setMeasuredDimension((int) (height * mFraction), height); + } else { + setMeasuredDimension(width, (int) (width * mFraction)); + } + } + +} diff --git a/libraries/LGLibrary/src/main/java/com/lightgame/view/scale/ScaleLinearLayout.java b/libraries/LGLibrary/src/main/java/com/lightgame/view/scale/ScaleLinearLayout.java new file mode 100755 index 0000000000..dd4ef8be93 --- /dev/null +++ b/libraries/LGLibrary/src/main/java/com/lightgame/view/scale/ScaleLinearLayout.java @@ -0,0 +1,51 @@ +package com.lightgame.view.scale; + +import android.content.Context; +import android.content.res.TypedArray; +import android.util.AttributeSet; +import android.widget.LinearLayout; + +import com.lightgame.R; + + +/** + * Created with IntelliJ IDEA. + * User: CsHeng + * Date: 13-3-15 + * Time: 下午12:31 + * To change this template use File | Settings | File Templates. + */ +public class ScaleLinearLayout extends LinearLayout { + + private boolean mMeasureByHeight = false; // default width + private float mFraction = 1f;// default square + + public ScaleLinearLayout(Context context) { + super(context); + } + + public ScaleLinearLayout(Context context, AttributeSet set) { + super(context, set); + TypedArray a = context.obtainStyledAttributes(set, R.styleable.ScaleView); + int enumV = a.getInt(R.styleable.ScaleView_measureBy, 0); + mFraction = a.getFloat(R.styleable.ScaleView_fractionValue, mFraction); + if (enumV != 0) { + mMeasureByHeight = true; + } + a.recycle(); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + int width = MeasureSpec.getSize(widthMeasureSpec); + int height = MeasureSpec.getSize(heightMeasureSpec); + if (mMeasureByHeight) { + setMeasuredDimension((int) (height * mFraction), height); + } else { + setMeasuredDimension(width, (int) (width * mFraction)); + } + } + + +} diff --git a/libraries/LGLibrary/src/main/java/com/lightgame/view/scale/ScaleRelativeLayout.java b/libraries/LGLibrary/src/main/java/com/lightgame/view/scale/ScaleRelativeLayout.java new file mode 100755 index 0000000000..8e2d29cb3a --- /dev/null +++ b/libraries/LGLibrary/src/main/java/com/lightgame/view/scale/ScaleRelativeLayout.java @@ -0,0 +1,50 @@ +package com.lightgame.view.scale; + +import android.content.Context; +import android.content.res.TypedArray; +import android.util.AttributeSet; +import android.widget.RelativeLayout; + +import com.lightgame.R; + + +/** + * Created with IntelliJ IDEA. + * User: CsHeng + * Date: 13-3-15 + * Time: 下午4:38 + * To change this template use File | Settings | File Templates. + */ +public class ScaleRelativeLayout extends RelativeLayout { + + private boolean mMeasureByHeight = false; // default width + private float mFraction = 1f;// default square + + public ScaleRelativeLayout(Context context) { + super(context); + } + + public ScaleRelativeLayout(Context context, AttributeSet set) { + super(context, set); + TypedArray a = context.obtainStyledAttributes(set, R.styleable.ScaleView); + int enumV = a.getInt(R.styleable.ScaleView_measureBy, 0); + mFraction = a.getFloat(R.styleable.ScaleView_fractionValue, mFraction); + if (enumV != 0) { + mMeasureByHeight = true; + } + a.recycle(); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + int width = MeasureSpec.getSize(widthMeasureSpec); + int height = MeasureSpec.getSize(heightMeasureSpec); + if (mMeasureByHeight) { + setMeasuredDimension((int) (height * mFraction), height); + } else { + setMeasuredDimension(width, (int) (width * mFraction)); + } + } + +} diff --git a/libraries/LGLibrary/src/main/java/com/lightgame/view/scale/ScaleViewPager.java b/libraries/LGLibrary/src/main/java/com/lightgame/view/scale/ScaleViewPager.java new file mode 100644 index 0000000000..e76d014a47 --- /dev/null +++ b/libraries/LGLibrary/src/main/java/com/lightgame/view/scale/ScaleViewPager.java @@ -0,0 +1,51 @@ +package com.lightgame.view.scale; + +import android.content.Context; +import android.content.res.TypedArray; +import android.support.v4.view.ViewPager; +import android.util.AttributeSet; + +import com.lightgame.R; + + +/** + * Created with IntelliJ IDEA. + * User: CsHeng + * Date: 13-3-15 + * Time: 下午4:38 + * To change this template use File | Settings | File Templates. + */ +public class ScaleViewPager extends ViewPager { + + private boolean mMeasureByHeight = false; // default width + private float mScale = 1f;// default square + + public ScaleViewPager(Context context) { + super(context); + } + + public ScaleViewPager(Context context, AttributeSet set) { + super(context, set); + TypedArray a = context.obtainStyledAttributes(set, R.styleable.ScaleView); + int enumV = a.getInt(R.styleable.ScaleView_measureBy, 0); + mScale = a.getFloat(R.styleable.ScaleView_fractionValue, mScale); + if (enumV != 0) { + mMeasureByHeight = true; + } + a.recycle(); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + int width = MeasureSpec.getSize(widthMeasureSpec); + int height = MeasureSpec.getSize(heightMeasureSpec); + if (mMeasureByHeight) { + setMeasuredDimension((int) (height * mScale), height); + } else { + setMeasuredDimension(width, (int) (width * mScale)); + } + + } + +} diff --git a/libraries/LGLibrary/src/main/res/values/lightgame_attrs.xml b/libraries/LGLibrary/src/main/res/values/lightgame_attrs.xml new file mode 100644 index 0000000000..ae0ab99f67 --- /dev/null +++ b/libraries/LGLibrary/src/main/res/values/lightgame_attrs.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/libraries/LGLibrary/src/main/res/values/lightgame_ids.xml b/libraries/LGLibrary/src/main/res/values/lightgame_ids.xml new file mode 100644 index 0000000000..430479cb2c --- /dev/null +++ b/libraries/LGLibrary/src/main/res/values/lightgame_ids.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index 7c18cde3e4..db9e7de06e 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,4 +1,5 @@ include ':app' +include ':libraries:LGLibrary' include ':libraries:MiPush' include ':libraries:MTA' include ':libraries:QQShare'