From ce0d6df7f0719976de958fe9a2e0a10855d66c2e Mon Sep 17 00:00:00 2001 From: hukang hwx963878 <252664817@qq.com> Date: Thu, 1 Apr 2021 10:26:24 +0800 Subject: [PATCH] pet classification update 1.1.1 fix smoe codes to remove copy --- .../mindspore/himindspore/bean/TabEntity.java | 11 +- .../himindspore/ui/guide/SplashActivity.java | 4 +- .../himindspore/ui/main/MainActivity.java | 105 +- .../himindspore/ui/main/MainContract.java | 6 +- .../himindspore/ui/main/MainPresenter.java | 8 +- .../himindspore/ui/view/MSTabEntity.java} | 10 +- .../app/src/main/res/layout/activity_main.xml | 49 +- .../src/main/res/layout/activity_splash.xml | 25 +- .../src/main/res/layout/layout_tab_top.xml | 31 + .../customview/countdown/CountDownView.java | 253 ----- .../customview/countdown/MSCountDownView.java | 227 +++++ .../customview/tablayout/CommonTabLayout.java | 943 ------------------ .../tablayout/SegmentTabLayout.java | 749 -------------- .../tablayout/SlidingTabLayout.java | 907 ----------------- .../listener/OnTabSelectListener.java | 21 - .../utils/FragmentChangeManager.java | 69 -- .../tablayout/utils/UnreadMsgUtils.java | 66 -- .../customview/tablayout/widget/MsgView.java | 150 --- .../src/main/res/layout/layout_tab.xml | 31 - .../src/main/res/layout/layout_tab_bottom.xml | 45 - .../src/main/res/layout/layout_tab_left.xml | 44 - .../src/main/res/layout/layout_tab_right.xml | 45 - .../main/res/layout/layout_tab_segment.xml | 39 - .../src/main/res/layout/layout_tab_top.xml | 44 - .../customView/src/main/res/values/values.xml | 167 +--- .../pet_classification/app/CMakeLists.txt | 9 +- .../pet_classification/app/download.gradle | 4 +- .../src/main/cpp/ImageMindSporeNetnative.cpp | 1 - .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 - .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 - .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 2527 -> 3593 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 4378 -> 0 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 4637 -> 5339 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 1520 -> 2636 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 2676 -> 0 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 2766 -> 3388 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 3680 -> 4926 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 6146 -> 0 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 6850 -> 7472 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 6071 -> 7909 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 10191 -> 0 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 10977 -> 11873 bytes .../app/src/main/res/mipmap-xxhdpi/logo.png | Bin 9405 -> 0 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 8641 -> 10652 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 14983 -> 0 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 15849 -> 16570 bytes 46 files changed, 396 insertions(+), 3677 deletions(-) rename model_zoo/official/lite/MindSpore_inhand/{customView/src/main/java/com/mindspore/customview/tablayout/listener/CustomTabEntity.java => app/src/main/java/com/mindspore/himindspore/ui/view/MSTabEntity.java} (79%) create mode 100644 model_zoo/official/lite/MindSpore_inhand/app/src/main/res/layout/layout_tab_top.xml delete mode 100644 model_zoo/official/lite/MindSpore_inhand/customView/src/main/java/com/mindspore/customview/countdown/CountDownView.java create mode 100644 model_zoo/official/lite/MindSpore_inhand/customView/src/main/java/com/mindspore/customview/countdown/MSCountDownView.java delete mode 100644 model_zoo/official/lite/MindSpore_inhand/customView/src/main/java/com/mindspore/customview/tablayout/CommonTabLayout.java delete mode 100644 model_zoo/official/lite/MindSpore_inhand/customView/src/main/java/com/mindspore/customview/tablayout/SegmentTabLayout.java delete mode 100644 model_zoo/official/lite/MindSpore_inhand/customView/src/main/java/com/mindspore/customview/tablayout/SlidingTabLayout.java delete mode 100644 model_zoo/official/lite/MindSpore_inhand/customView/src/main/java/com/mindspore/customview/tablayout/listener/OnTabSelectListener.java delete mode 100644 model_zoo/official/lite/MindSpore_inhand/customView/src/main/java/com/mindspore/customview/tablayout/utils/FragmentChangeManager.java delete mode 100644 model_zoo/official/lite/MindSpore_inhand/customView/src/main/java/com/mindspore/customview/tablayout/utils/UnreadMsgUtils.java delete mode 100644 model_zoo/official/lite/MindSpore_inhand/customView/src/main/java/com/mindspore/customview/tablayout/widget/MsgView.java delete mode 100644 model_zoo/official/lite/MindSpore_inhand/customView/src/main/res/layout/layout_tab.xml delete mode 100644 model_zoo/official/lite/MindSpore_inhand/customView/src/main/res/layout/layout_tab_bottom.xml delete mode 100644 model_zoo/official/lite/MindSpore_inhand/customView/src/main/res/layout/layout_tab_left.xml delete mode 100644 model_zoo/official/lite/MindSpore_inhand/customView/src/main/res/layout/layout_tab_right.xml delete mode 100644 model_zoo/official/lite/MindSpore_inhand/customView/src/main/res/layout/layout_tab_segment.xml delete mode 100644 model_zoo/official/lite/MindSpore_inhand/customView/src/main/res/layout/layout_tab_top.xml delete mode 100644 model_zoo/official/lite/pet_classification/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml delete mode 100644 model_zoo/official/lite/pet_classification/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml delete mode 100644 model_zoo/official/lite/pet_classification/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png delete mode 100644 model_zoo/official/lite/pet_classification/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png delete mode 100644 model_zoo/official/lite/pet_classification/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png delete mode 100644 model_zoo/official/lite/pet_classification/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png delete mode 100644 model_zoo/official/lite/pet_classification/app/src/main/res/mipmap-xxhdpi/logo.png delete mode 100644 model_zoo/official/lite/pet_classification/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png diff --git a/model_zoo/official/lite/MindSpore_inhand/app/src/main/java/com/mindspore/himindspore/bean/TabEntity.java b/model_zoo/official/lite/MindSpore_inhand/app/src/main/java/com/mindspore/himindspore/bean/TabEntity.java index 987ec3483ed..e8e357ca3c9 100644 --- a/model_zoo/official/lite/MindSpore_inhand/app/src/main/java/com/mindspore/himindspore/bean/TabEntity.java +++ b/model_zoo/official/lite/MindSpore_inhand/app/src/main/java/com/mindspore/himindspore/bean/TabEntity.java @@ -15,9 +15,10 @@ */ package com.mindspore.himindspore.bean; -import com.mindspore.customview.tablayout.listener.CustomTabEntity; -public class TabEntity implements CustomTabEntity { +import com.mindspore.himindspore.ui.view.MSTabEntity; + +public class TabEntity implements MSTabEntity { public String title; public int selectedIcon; @@ -30,17 +31,17 @@ public class TabEntity implements CustomTabEntity { } @Override - public String getTabTitle() { + public String getMSTabTitle() { return title; } @Override - public int getTabSelectedIcon() { + public int getMSTabIconChecked() { return selectedIcon; } @Override - public int getTabUnselectedIcon() { + public int getMSTabIconUnchecked() { return unSelectedIcon; } } diff --git a/model_zoo/official/lite/MindSpore_inhand/app/src/main/java/com/mindspore/himindspore/ui/guide/SplashActivity.java b/model_zoo/official/lite/MindSpore_inhand/app/src/main/java/com/mindspore/himindspore/ui/guide/SplashActivity.java index f48e489b87e..1f152bc3d2e 100644 --- a/model_zoo/official/lite/MindSpore_inhand/app/src/main/java/com/mindspore/himindspore/ui/guide/SplashActivity.java +++ b/model_zoo/official/lite/MindSpore_inhand/app/src/main/java/com/mindspore/himindspore/ui/guide/SplashActivity.java @@ -40,7 +40,7 @@ import androidx.appcompat.app.AlertDialog; import com.mindspore.common.sp.Preferences; import com.mindspore.common.utils.Utils; -import com.mindspore.customview.countdown.CountDownView; +import com.mindspore.customview.countdown.MSCountDownView; import com.mindspore.himindspore.R; import com.mindspore.himindspore.base.BaseActivity; import com.mindspore.himindspore.ui.main.MainActivity; @@ -63,7 +63,7 @@ public class SplashActivity extends BaseActivity implements EasyPermissions.Perm private SharedPreferences prefs; - private CountDownView cdvTime; + private MSCountDownView cdvTime; private boolean isCheckPrivacy = false; private View mContentView; diff --git a/model_zoo/official/lite/MindSpore_inhand/app/src/main/java/com/mindspore/himindspore/ui/main/MainActivity.java b/model_zoo/official/lite/MindSpore_inhand/app/src/main/java/com/mindspore/himindspore/ui/main/MainActivity.java index 993c131b3e7..d36f6151d96 100644 --- a/model_zoo/official/lite/MindSpore_inhand/app/src/main/java/com/mindspore/himindspore/ui/main/MainActivity.java +++ b/model_zoo/official/lite/MindSpore_inhand/app/src/main/java/com/mindspore/himindspore/ui/main/MainActivity.java @@ -24,22 +24,25 @@ import android.net.Uri; import android.os.Build; import android.os.Environment; import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; import android.widget.Toast; import androidx.core.content.FileProvider; import androidx.fragment.app.Fragment; import androidx.viewpager.widget.ViewPager; +import com.google.android.material.tabs.TabLayout; import com.mindspore.common.base.adapter.BasePagerAdapter; import com.mindspore.customview.dialog.UpdateDialog; -import com.mindspore.customview.tablayout.CommonTabLayout; -import com.mindspore.customview.tablayout.listener.CustomTabEntity; -import com.mindspore.customview.tablayout.listener.OnTabSelectListener; import com.mindspore.himindspore.R; import com.mindspore.himindspore.base.BaseActivity; import com.mindspore.himindspore.comment.FragmentFactory; import com.mindspore.himindspore.net.FileDownLoadObserver; import com.mindspore.himindspore.net.UpdateInfoBean; +import com.mindspore.himindspore.ui.view.MSTabEntity; import java.io.File; import java.util.ArrayList; @@ -49,16 +52,18 @@ public class MainActivity extends BaseActivity implements MainCon private static final String TAG = "MainActivity"; private ViewPager mVpHome; - private CommonTabLayout mCtlTable; + private TabLayout mTabLayout; private int now_version; private ProgressDialog progressDialog; + private List mTabEntities; + @Override protected void init() { presenter = new MainPresenter(this); mVpHome = findViewById(R.id.vp_home); - mCtlTable = findViewById(R.id.ctl_table); + mTabLayout = findViewById(R.id.tab_layout); showPackaeInfo(); initTabLayout(); initViewPager(); @@ -82,19 +87,68 @@ public class MainActivity extends BaseActivity implements MainCon } private void initTabLayout() { - ArrayList mTabEntities = presenter.getTabEntity(); - mCtlTable.setTabData(mTabEntities); - mCtlTable.setOnTabSelectListener(new OnTabSelectListener() { + mTabEntities = presenter.getTabEntity(); + for (int i = 0; i < mTabEntities.size(); i++) { + mTabLayout.addTab(mTabLayout.newTab().setCustomView(getTabView(mTabEntities.get(i)))); + } + + chooseFirst(); + mTabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { @Override - public void onTabSelect(int position) { - mVpHome.setCurrentItem(position); + public void onTabSelected(TabLayout.Tab tab) { + Log.e(TAG, "onTabSelected: " + tab.getPosition()); + mVpHome.setCurrentItem(tab.getPosition(),true); + recoverItem(); + View view =tab.getCustomView(); + ImageView imageView = view.findViewById(R.id.tab_icon); + TextView textView = view.findViewById(R.id.tab_title); + imageView.setImageResource(mTabEntities.get(tab.getPosition()).getMSTabIconChecked()); + textView.setTextColor(getResources().getColor(R.color.main_tab_text_checked)); } @Override - public void onTabReselect(int position) { + public void onTabUnselected(TabLayout.Tab tab) { + + } + + @Override + public void onTabReselected(TabLayout.Tab tab) { } }); + + } + + public View getTabView(MSTabEntity tabEntity) { + View view = LayoutInflater.from(this).inflate(R.layout.layout_tab_top, null); + ImageView tabIcon = view.findViewById(R.id.tab_icon); + tabIcon.setImageResource(tabEntity.getMSTabIconUnchecked()); + TextView tabText = view.findViewById(R.id.tab_title); + tabText.setText(tabEntity.getMSTabTitle()); + tabText.setTextColor(getResources().getColor(R.color.main_tab_text_uncheck)); + return view; + } + + + private void chooseFirst() { + TabLayout.Tab tabAt = mTabLayout.getTabAt(0); + View view = tabAt.getCustomView(); + ImageView imageView = view.findViewById(R.id.tab_icon); + TextView textView = view.findViewById(R.id.tab_title); + imageView.setImageResource(mTabEntities.get(0).getMSTabIconChecked()); + textView.setTextColor(getResources().getColor(R.color.main_tab_text_checked)); + } + + + private void recoverItem() { + for (int i = 0; i < mTabEntities.size(); i++) { + TabLayout.Tab tabAt = mTabLayout.getTabAt(i); + View view = tabAt.getCustomView(); + ImageView imageView = view.findViewById(R.id.tab_icon); + TextView textView = view.findViewById(R.id.tab_title); + imageView.setImageResource(mTabEntities.get(i).getMSTabIconUnchecked()); + textView.setTextColor(getResources().getColor(R.color.main_tab_text_uncheck)); + } } private void initViewPager() { @@ -104,23 +158,7 @@ public class MainActivity extends BaseActivity implements MainCon fragments.add(FragmentFactory.getInstance().getMeFragment()); BasePagerAdapter adapter = new BasePagerAdapter(getSupportFragmentManager(), fragments); mVpHome.setAdapter(adapter); - mVpHome.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { - @Override - public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { - - } - - @Override - public void onPageSelected(int position) { - if (position >= 0) { - mCtlTable.setCurrentTab(position); - } - } - - @Override - public void onPageScrollStateChanged(int state) { - } - }); + mVpHome.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(mTabLayout)); mVpHome.setOffscreenPageLimit(3); mVpHome.setCurrentItem(0); } @@ -171,7 +209,7 @@ public class MainActivity extends BaseActivity implements MainCon public void showUpdate(final UpdateInfoBean updateInfo) { if (now_version != updateInfo.getVersionCode()) { - UpdateDialog updateDialog= new UpdateDialog(this); + UpdateDialog updateDialog = new UpdateDialog(this); updateDialog.setTitleString(getResources().getString(R.string.app_update_lastest) + updateInfo.getVersionName()); updateDialog.setContentString(updateInfo.getMessage()); updateDialog.setYesOnclickListener(() -> downFile()); @@ -201,12 +239,9 @@ public class MainActivity extends BaseActivity implements MainCon @Override public void onProgress(final int progress, final long total) { - runOnUiThread(new Runnable() { - @Override - public void run() { - progressDialog.setMax((int) total / 1024 / 1024); - progressDialog.setProgress(progress); - } + runOnUiThread(() -> { + progressDialog.setMax((int) total / 1024 / 1024); + progressDialog.setProgress(progress); }); } diff --git a/model_zoo/official/lite/MindSpore_inhand/app/src/main/java/com/mindspore/himindspore/ui/main/MainContract.java b/model_zoo/official/lite/MindSpore_inhand/app/src/main/java/com/mindspore/himindspore/ui/main/MainContract.java index e45f0e49bd7..e6b29ee7889 100644 --- a/model_zoo/official/lite/MindSpore_inhand/app/src/main/java/com/mindspore/himindspore/ui/main/MainContract.java +++ b/model_zoo/official/lite/MindSpore_inhand/app/src/main/java/com/mindspore/himindspore/ui/main/MainContract.java @@ -15,12 +15,12 @@ */ package com.mindspore.himindspore.ui.main; -import com.mindspore.customview.tablayout.listener.CustomTabEntity; import com.mindspore.himindspore.net.FileDownLoadObserver; import com.mindspore.himindspore.net.UpdateInfoBean; +import com.mindspore.himindspore.ui.view.MSTabEntity; import java.io.File; -import java.util.ArrayList; +import java.util.List; public interface MainContract { @@ -31,7 +31,7 @@ public interface MainContract { } interface Presenter { - ArrayList getTabEntity(); + List getTabEntity(); void getUpdateInfo(); diff --git a/model_zoo/official/lite/MindSpore_inhand/app/src/main/java/com/mindspore/himindspore/ui/main/MainPresenter.java b/model_zoo/official/lite/MindSpore_inhand/app/src/main/java/com/mindspore/himindspore/ui/main/MainPresenter.java index f28c49be293..d1e2bf3d182 100644 --- a/model_zoo/official/lite/MindSpore_inhand/app/src/main/java/com/mindspore/himindspore/ui/main/MainPresenter.java +++ b/model_zoo/official/lite/MindSpore_inhand/app/src/main/java/com/mindspore/himindspore/ui/main/MainPresenter.java @@ -19,13 +19,13 @@ import android.content.res.TypedArray; import android.util.Log; import com.mindspore.common.utils.Utils; -import com.mindspore.customview.tablayout.listener.CustomTabEntity; import com.mindspore.himindspore.R; import com.mindspore.himindspore.base.BasePresenter; import com.mindspore.himindspore.bean.TabEntity; import com.mindspore.himindspore.net.FileDownLoadObserver; import com.mindspore.himindspore.net.RetrofitHelper; import com.mindspore.himindspore.net.UpdateInfoBean; +import com.mindspore.himindspore.ui.view.MSTabEntity; import java.io.File; import java.util.ArrayList; @@ -51,15 +51,15 @@ public class MainPresenter extends BasePresenter implements MainCo @Override - public ArrayList getTabEntity() { - ArrayList mTabEntities = new ArrayList<>(); + public ArrayList getTabEntity() { + ArrayList mTabEntities = new ArrayList<>(); TypedArray mIconUnSelectIds = Utils.getApp().getResources().obtainTypedArray(R.array.main_tab_un_select); TypedArray mIconSelectIds = Utils.getApp().getResources().obtainTypedArray(R.array.main_tab_select); String[] mainTitles = Utils.getApp().getResources().getStringArray(R.array.main_tab_title); for (int i = 0; i < mainTitles.length; i++) { int unSelectId = mIconUnSelectIds.getResourceId(i, R.drawable.experience_uncheck); int selectId = mIconSelectIds.getResourceId(i, R.drawable.experience_checked); - mTabEntities.add(new TabEntity(mainTitles[i],selectId , unSelectId)); + mTabEntities.add(new TabEntity(mainTitles[i], selectId, unSelectId)); } mIconUnSelectIds.recycle(); mIconSelectIds.recycle(); diff --git a/model_zoo/official/lite/MindSpore_inhand/customView/src/main/java/com/mindspore/customview/tablayout/listener/CustomTabEntity.java b/model_zoo/official/lite/MindSpore_inhand/app/src/main/java/com/mindspore/himindspore/ui/view/MSTabEntity.java similarity index 79% rename from model_zoo/official/lite/MindSpore_inhand/customView/src/main/java/com/mindspore/customview/tablayout/listener/CustomTabEntity.java rename to model_zoo/official/lite/MindSpore_inhand/app/src/main/java/com/mindspore/himindspore/ui/view/MSTabEntity.java index 0481aa34fda..29bd1d8ed67 100644 --- a/model_zoo/official/lite/MindSpore_inhand/customView/src/main/java/com/mindspore/customview/tablayout/listener/CustomTabEntity.java +++ b/model_zoo/official/lite/MindSpore_inhand/app/src/main/java/com/mindspore/himindspore/ui/view/MSTabEntity.java @@ -13,16 +13,16 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mindspore.customview.tablayout.listener; +package com.mindspore.himindspore.ui.view; import androidx.annotation.DrawableRes; -public interface CustomTabEntity { - String getTabTitle(); +public interface MSTabEntity { + String getMSTabTitle(); @DrawableRes - int getTabSelectedIcon(); + int getMSTabIconChecked(); @DrawableRes - int getTabUnselectedIcon(); + int getMSTabIconUnchecked(); } diff --git a/model_zoo/official/lite/MindSpore_inhand/app/src/main/res/layout/activity_main.xml b/model_zoo/official/lite/MindSpore_inhand/app/src/main/res/layout/activity_main.xml index 972a4294a23..60d79e7c2f1 100644 --- a/model_zoo/official/lite/MindSpore_inhand/app/src/main/res/layout/activity_main.xml +++ b/model_zoo/official/lite/MindSpore_inhand/app/src/main/res/layout/activity_main.xml @@ -1,43 +1,36 @@ - - - + android:layout_height="0dp" + android:layout_weight="1" + android:background="@color/white" /> - + android:layout_height="55dp" + android:background="@color/white" + app:tabGravity="fill" + app:tabIndicatorFullWidth="false" + app:tabIndicatorGravity="center" + app:tabIndicatorHeight="0dp" + app:tabMaxWidth="0dp" + app:tabMode="fixed" + app:tabRippleColor="@android:color/transparent" + app:tabSelectedTextColor="@color/main_tab_text_checked" + app:tabTextColor="@color/main_tab_text_uncheck" /> - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/model_zoo/official/lite/MindSpore_inhand/app/src/main/res/layout/activity_splash.xml b/model_zoo/official/lite/MindSpore_inhand/app/src/main/res/layout/activity_splash.xml index 0086ebd967e..29a7d646cf7 100644 --- a/model_zoo/official/lite/MindSpore_inhand/app/src/main/res/layout/activity_splash.xml +++ b/model_zoo/official/lite/MindSpore_inhand/app/src/main/res/layout/activity_splash.xml @@ -7,7 +7,6 @@ android:background="@color/white" tools:context=".ui.guide.SplashActivity"> - - + app:layout_constraintTop_toTopOf="parent" + app:ms_cd_animator_time="3" + app:ms_cd_animator_time_unit="@string/splash_count_down" + app:ms_cd_arc_color="@color/btn_small_checked" + app:ms_cd_arc_width="2dp" + app:ms_cd_bg_color="@color/gray_light" + app:ms_cd_circle_radius="20dp" + app:ms_cd_location="top" + app:ms_cd_retreat_type="forward" + app:ms_cd_text_color="@color/black" + app:ms_cd_text_size="12sp" /> \ No newline at end of file diff --git a/model_zoo/official/lite/MindSpore_inhand/app/src/main/res/layout/layout_tab_top.xml b/model_zoo/official/lite/MindSpore_inhand/app/src/main/res/layout/layout_tab_top.xml new file mode 100644 index 00000000000..e8cf6b6516b --- /dev/null +++ b/model_zoo/official/lite/MindSpore_inhand/app/src/main/res/layout/layout_tab_top.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/model_zoo/official/lite/MindSpore_inhand/customView/src/main/java/com/mindspore/customview/countdown/CountDownView.java b/model_zoo/official/lite/MindSpore_inhand/customView/src/main/java/com/mindspore/customview/countdown/CountDownView.java deleted file mode 100644 index a09e594b810..00000000000 --- a/model_zoo/official/lite/MindSpore_inhand/customView/src/main/java/com/mindspore/customview/countdown/CountDownView.java +++ /dev/null @@ -1,253 +0,0 @@ -/** - * Copyright 2021 Huawei Technologies Co., Ltd - *

- * 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.mindspore.customview.countdown; - -import android.animation.Animator; -import android.animation.AnimatorListenerAdapter; -import android.animation.AnimatorSet; -import android.animation.ValueAnimator; -import android.annotation.TargetApi; -import android.content.Context; -import android.content.res.TypedArray; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.graphics.RectF; -import android.graphics.Typeface; -import android.os.Build; -import android.text.TextUtils; -import android.util.AttributeSet; -import android.view.View; -import android.view.animation.LinearInterpolator; - -import androidx.annotation.Nullable; -import androidx.core.content.ContextCompat; - -import com.mindspore.customview.R; - -public class CountDownView extends View { - - private Context mContext;//上下文 - private Paint mPaintBackGround;//背景画笔 - private Paint mPaintArc;//圆弧画笔 - private Paint mPaintText;//文字画笔 - private int mRetreatType;//圆弧绘制方式(增加和减少) - private float mPaintArcWidth;//最外层圆弧的宽度 - private int mCircleRadius;//圆圈的半径 - private int mPaintArcColor = Color.parseColor("#3C3F41");//初始值 - private int mPaintBackGroundColor = Color.parseColor("#55B2E5");//初始值 - private int mLoadingTime;//时间,单位秒 - private String mLoadingTimeUnit = "";//时间单位 - private int mTextColor = Color.BLACK;//字体颜色 - private int mTextSize;//字体大小 - private int location;//从哪个位置开始 - private float startAngle;//开始角度 - private float mmSweepAngleStart;//起点 - private float mmSweepAngleEnd;//终点 - private float mSweepAngle;//扫过的角度 - private String mText = "";//要绘制的文字 - private int mWidth; - private int mHeight; - private AnimatorSet set; - - public CountDownView(Context context) { - this(context, null); - } - - public CountDownView(Context context, @Nullable AttributeSet attrs) { - this(context, attrs, 0); - } - - public CountDownView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - mContext = context; - - TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.CountDownView); - mRetreatType = array.getInt(R.styleable.CountDownView_cd_retreat_type, 1); - location = array.getInt(R.styleable.CountDownView_cd_location, 1); - mCircleRadius = (int) array.getDimension(R.styleable.CountDownView_cd_circle_radius, dip2px(context, 25));//默认25dp - mPaintArcWidth = array.getDimension(R.styleable.CountDownView_cd_arc_width, dip2px(context, 3));//默认3dp - mPaintArcColor = array.getColor(R.styleable.CountDownView_cd_arc_color, mPaintArcColor); - mTextSize = (int) array.getDimension(R.styleable.CountDownView_cd_text_size, dip2px(context, 14));//默认14sp - mTextColor = array.getColor(R.styleable.CountDownView_cd_text_color, mTextColor); - mPaintBackGroundColor = array.getColor(R.styleable.CountDownView_cd_bg_color, mPaintBackGroundColor); - mLoadingTime = array.getInteger(R.styleable.CountDownView_cd_animator_time, 3);//默认3秒 - mLoadingTimeUnit = array.getString(R.styleable.CountDownView_cd_animator_time_unit);//时间单位 - if (TextUtils.isEmpty(mLoadingTimeUnit)) { - mLoadingTimeUnit = ""; - } - array.recycle(); - init(); - } - - @TargetApi(Build.VERSION_CODES.JELLY_BEAN) - private void init() { - //背景设为透明,然后造成圆形View的视觉错觉 - this.setBackground(ContextCompat.getDrawable(mContext, android.R.color.transparent)); - mPaintBackGround = new Paint(); - mPaintBackGround.setStyle(Paint.Style.FILL); - mPaintBackGround.setAntiAlias(true); - mPaintBackGround.setColor(mPaintBackGroundColor); - - mPaintArc = new Paint(); - mPaintArc.setStyle(Paint.Style.STROKE); - mPaintArc.setAntiAlias(true); - mPaintArc.setColor(mPaintArcColor); - mPaintArc.setStrokeWidth(mPaintArcWidth); - - mPaintText = new Paint(Paint.ANTI_ALIAS_FLAG); - mPaintText.setStyle(Paint.Style.STROKE); - mPaintText.setStyle(Paint.Style.FILL); - mPaintText.setAntiAlias(true); - mPaintText.setColor(mTextColor); - mPaintText.setTextSize(mTextSize); - //如果时间为小于0,则默认倒计时时间为3秒 - if (mLoadingTime < 0) { - mLoadingTime = 3; - } - if (location == 1) {//默认从左侧开始 - startAngle = -180; - } else if (location == 2) { - startAngle = -90; - } else if (location == 3) { - startAngle = 0; - } else if (location == 4) { - startAngle = 90; - } - - if (mRetreatType == 1) { - mmSweepAngleStart = 0f; - mmSweepAngleEnd = 360f; - } else { - mmSweepAngleStart = 360f; - mmSweepAngleEnd = 0f; - } - } - - - @Override - protected void onSizeChanged(int w, int h, int oldw, int oldh) { - super.onSizeChanged(w, h, oldw, oldh); - //获取view宽高 - mWidth = w; - mHeight = h; - } - - - @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - super.onMeasure(widthMeasureSpec, heightMeasureSpec); - //因为必须是圆形的view,所以在这里重新赋值 - setMeasuredDimension(mCircleRadius * 2, mCircleRadius * 2); - } - - - @Override - protected void onDraw(Canvas canvas) { - super.onDraw(canvas); - //画北景园 - canvas.drawCircle(mWidth / 2, mHeight / 2, mWidth / 2 - mPaintArcWidth, mPaintBackGround); - //画圆弧 - RectF rectF = new RectF(0 + mPaintArcWidth / 2, 0 + mPaintArcWidth / 2, mWidth - mPaintArcWidth / 2, mHeight - mPaintArcWidth / 2); - canvas.drawArc(rectF, startAngle, mSweepAngle, false, mPaintArc); - //画文字 - float mTextWidth = mPaintText.measureText(mText, 0, mText.length()); - float dx = mWidth / 2 - mTextWidth / 2; - Paint.FontMetricsInt fontMetricsInt = mPaintText.getFontMetricsInt(); - float dy = (fontMetricsInt.bottom - fontMetricsInt.top) / 2 - fontMetricsInt.bottom; - float baseLine = mHeight / 2 + dy; - canvas.drawText(mText, dx, baseLine, mPaintText); - } - - /** - * 开始动态倒计时 - */ - public void start() { - ValueAnimator animator = ValueAnimator.ofFloat(mmSweepAngleStart, mmSweepAngleEnd); - animator.setInterpolator(new LinearInterpolator()); - animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { - @Override - public void onAnimationUpdate(ValueAnimator valueAnimator) { - mSweepAngle = (float) valueAnimator.getAnimatedValue(); - //获取到需要绘制的角度,重新绘制 - invalidate(); - } - }); - //这里是时间获取和赋值 - ValueAnimator animator1 = ValueAnimator.ofInt(mLoadingTime, 0); - animator1.setInterpolator(new LinearInterpolator()); - animator1.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { - @Override - public void onAnimationUpdate(ValueAnimator valueAnimator) { - int time = (int) valueAnimator.getAnimatedValue(); - mText = time + mLoadingTimeUnit; - } - }); - set = new AnimatorSet(); - set.playTogether(animator, animator1); - set.setDuration(mLoadingTime * 1000); - set.setInterpolator(new LinearInterpolator()); - set.start(); - set.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - super.onAnimationEnd(animation); - clearAnimation(); - if (loadingFinishListener != null) { - loadingFinishListener.finish(); - } - } - }); - } - - /** - * 停止动画 - */ - public void stop() { - loadingFinishListener = null; - - if (set != null && set.isRunning()) { - set.cancel(); - } - } - - /** - * 设置倒计时时间 - * - * @param time 时间,秒 - */ - public void setTime(int time) { - mLoadingTime = time; - } - - private OnLoadingFinishListener loadingFinishListener; - - public void setOnLoadingFinishListener(OnLoadingFinishListener listener) { - this.loadingFinishListener = listener; - } - - public interface OnLoadingFinishListener { - void finish(); - } - - /** - * 根据手机的分辨率从 dp 的单位 转成为 px(像素) - */ - public static int dip2px(Context context, float dpValue) { - final float scale = context.getResources().getDisplayMetrics().density; - return (int) (dpValue * scale + 0.5f); - } -} diff --git a/model_zoo/official/lite/MindSpore_inhand/customView/src/main/java/com/mindspore/customview/countdown/MSCountDownView.java b/model_zoo/official/lite/MindSpore_inhand/customView/src/main/java/com/mindspore/customview/countdown/MSCountDownView.java new file mode 100644 index 00000000000..223f065b9a5 --- /dev/null +++ b/model_zoo/official/lite/MindSpore_inhand/customView/src/main/java/com/mindspore/customview/countdown/MSCountDownView.java @@ -0,0 +1,227 @@ +/** + * Copyright 2021 Huawei Technologies Co., Ltd + *

+ * 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.mindspore.customview.countdown; + +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; +import android.animation.AnimatorSet; +import android.animation.ValueAnimator; +import android.annotation.TargetApi; +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.RectF; +import android.os.Build; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.view.View; +import android.view.animation.LinearInterpolator; + +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; + +import com.mindspore.common.utils.DisplayUtil; +import com.mindspore.customview.R; + +public class MSCountDownView extends View { + + private static final int HALF = 2; + private Context mContext; + private Paint mPaintBackGround, mPaintArc, mPaintText; + + private int mRetreatType; + private float mPaintArcWidth; + private int mCircleRadius; + private int mPaintArcColor = Color.RED; + private int mPaintBackGroundColor = Color.BLUE; + private int mLoadingTime; + private String mLoadingTimeUnit = ""; + private int mTextColor = Color.BLACK; + private int mTextSize; + private int location; + private float startAngle, mmSweepAngleStart, mmSweepAngleEnd, mSweepAngle; + + private String mText = ""; + private int mWidth, mHeight; + private AnimatorSet set; + + public MSCountDownView(Context context) { + this(context, null); + } + + public MSCountDownView(Context context, @Nullable AttributeSet attrs) { + this(context, attrs, 0); + } + + public MSCountDownView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + + mContext = context; + init(attrs); + initView(); + } + + private void init(AttributeSet attrs) { + TypedArray array = mContext.obtainStyledAttributes(attrs, R.styleable.MSCountDownView); + mRetreatType = array.getInt(R.styleable.MSCountDownView_ms_cd_retreat_type, 1); + location = array.getInt(R.styleable.MSCountDownView_ms_cd_location, 1); + mCircleRadius = (int) array.getDimension(R.styleable.MSCountDownView_ms_cd_circle_radius, DisplayUtil.dp2px(mContext, 25)); + mPaintArcWidth = array.getDimension(R.styleable.MSCountDownView_ms_cd_arc_width, DisplayUtil.dp2px(mContext, 3)); + mPaintArcColor = array.getColor(R.styleable.MSCountDownView_ms_cd_arc_color, mPaintArcColor); + mTextSize = (int) array.getDimension(R.styleable.MSCountDownView_ms_cd_text_size, DisplayUtil.dp2px(mContext, 14)); + mTextColor = array.getColor(R.styleable.MSCountDownView_ms_cd_text_color, mTextColor); + mPaintBackGroundColor = array.getColor(R.styleable.MSCountDownView_ms_cd_bg_color, mPaintBackGroundColor); + mLoadingTime = array.getInteger(R.styleable.MSCountDownView_ms_cd_animator_time, 3); + mLoadingTimeUnit = array.getString(R.styleable.MSCountDownView_ms_cd_animator_time_unit); + if (TextUtils.isEmpty(mLoadingTimeUnit)) { + mLoadingTimeUnit = ""; + } + array.recycle(); + } + + @TargetApi(Build.VERSION_CODES.JELLY_BEAN) + private void initView() { + this.setBackground(ContextCompat.getDrawable(mContext, android.R.color.transparent)); + mPaintBackGround = new Paint(); + mPaintBackGround.setAntiAlias(true); + mPaintBackGround.setStyle(Paint.Style.FILL); + mPaintBackGround.setColor(mPaintBackGroundColor); + + mPaintArc = new Paint(); + mPaintArc.setAntiAlias(true); + mPaintArc.setStyle(Paint.Style.STROKE); + mPaintArc.setColor(mPaintArcColor); + mPaintArc.setStrokeWidth(mPaintArcWidth); + + mPaintText = new Paint(Paint.ANTI_ALIAS_FLAG); + mPaintText.setAntiAlias(true); + mPaintText.setStyle(Paint.Style.STROKE); + mPaintText.setStyle(Paint.Style.FILL); + mPaintText.setColor(mTextColor); + mPaintText.setTextSize(mTextSize); + + if (mLoadingTime < 0) { + mLoadingTime = 3; + } + switch (location) { + case 1: + startAngle = -180; + break; + case 2: + startAngle = -90; + break; + case 3: + startAngle = 0; + break; + case 4: + startAngle = 90; + break; + } + + if (mRetreatType == 1) { + mmSweepAngleStart = 0f; + mmSweepAngleEnd = 360f; + } else { + mmSweepAngleStart = 360f; + mmSweepAngleEnd = 0f; + } + } + + + @Override + protected void onSizeChanged(int w, int h, int oldw, int oldh) { + super.onSizeChanged(w, h, oldw, oldh); + mWidth = w; + mHeight = h; + } + + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + setMeasuredDimension(mCircleRadius * HALF, mCircleRadius * HALF); + } + + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + canvas.drawCircle(mWidth / HALF, mHeight / HALF, mWidth / HALF - mPaintArcWidth, mPaintBackGround); + RectF rectF = new RectF( mPaintArcWidth / HALF, mPaintArcWidth / HALF, mWidth - mPaintArcWidth / HALF, mHeight - mPaintArcWidth / HALF); + canvas.drawArc(rectF, startAngle, mSweepAngle, false, mPaintArc); + float mTextWidth = mPaintText.measureText(mText, 0, mText.length()); + float dx = mWidth / HALF - mTextWidth / HALF; + Paint.FontMetricsInt fontMetricsInt = mPaintText.getFontMetricsInt(); + float dy = (fontMetricsInt.bottom - fontMetricsInt.top) / HALF - fontMetricsInt.bottom; + float baseLine = mHeight / HALF + dy; + canvas.drawText(mText, dx, baseLine, mPaintText); + } + + public void start() { + ValueAnimator viewAnimator = ValueAnimator.ofFloat(mmSweepAngleStart, mmSweepAngleEnd); + viewAnimator.setInterpolator(new LinearInterpolator()); + viewAnimator.addUpdateListener(valueAnimator -> { + mSweepAngle = (float) valueAnimator.getAnimatedValue(); + invalidate(); + }); + ValueAnimator textAnimator = ValueAnimator.ofInt(mLoadingTime, 0); + textAnimator.setInterpolator(new LinearInterpolator()); + textAnimator.addUpdateListener(valueAnimator -> { + int time = (int) valueAnimator.getAnimatedValue(); + mText = time + mLoadingTimeUnit; + }); + set = new AnimatorSet(); + set.setDuration(mLoadingTime * 1000); + set.playTogether(viewAnimator, textAnimator); + set.setInterpolator(new LinearInterpolator()); + set.start(); + set.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + super.onAnimationEnd(animation); + clearAnimation(); + if (onCountDownFinishListener != null) { + onCountDownFinishListener.finish(); + } + } + }); + } + + public void stop() { + onCountDownFinishListener = null; + if (set != null && set.isRunning()) { + set.cancel(); + } + } + + public void setTime(int time) { + mLoadingTime = time; + } + + private OnCountDownFinishListener onCountDownFinishListener; + + public void setOnLoadingFinishListener(OnCountDownFinishListener listener) { + this.onCountDownFinishListener = listener; + } + + public interface OnCountDownFinishListener { + void finish(); + } + + +} diff --git a/model_zoo/official/lite/MindSpore_inhand/customView/src/main/java/com/mindspore/customview/tablayout/CommonTabLayout.java b/model_zoo/official/lite/MindSpore_inhand/customView/src/main/java/com/mindspore/customview/tablayout/CommonTabLayout.java deleted file mode 100644 index c9b6c6c0a85..00000000000 --- a/model_zoo/official/lite/MindSpore_inhand/customView/src/main/java/com/mindspore/customview/tablayout/CommonTabLayout.java +++ /dev/null @@ -1,943 +0,0 @@ -/** - * Copyright 2021 Huawei Technologies Co., Ltd - *

- * 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.mindspore.customview.tablayout; - -import android.animation.TypeEvaluator; -import android.animation.ValueAnimator; -import android.content.Context; -import android.content.res.TypedArray; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.graphics.Path; -import android.graphics.Rect; -import android.graphics.drawable.GradientDrawable; -import android.os.Bundle; -import android.os.Parcelable; -import android.util.AttributeSet; -import android.util.SparseArray; -import android.util.TypedValue; -import android.view.Gravity; -import android.view.View; -import android.view.ViewGroup; -import android.view.animation.OvershootInterpolator; -import android.widget.FrameLayout; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.TextView; - -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentActivity; - -import com.mindspore.common.utils.DisplayUtil; -import com.mindspore.customview.R; -import com.mindspore.customview.tablayout.listener.CustomTabEntity; -import com.mindspore.customview.tablayout.listener.OnTabSelectListener; -import com.mindspore.customview.tablayout.utils.FragmentChangeManager; -import com.mindspore.customview.tablayout.utils.UnreadMsgUtils; -import com.mindspore.customview.tablayout.widget.MsgView; - -import java.util.ArrayList; - -public class CommonTabLayout extends FrameLayout implements ValueAnimator.AnimatorUpdateListener { - private Context mContext; - private ArrayList mTabEntitys = new ArrayList<>(); - private LinearLayout mTabsContainer; - private int mCurrentTab; - private int mLastTab; - private int mTabCount; - - private final Rect mIndicatorRect = new Rect(); - private final GradientDrawable mIndicatorDrawable = new GradientDrawable(); - - private Paint mRectPaint = new Paint(Paint.ANTI_ALIAS_FLAG); - private Paint mDividerPaint = new Paint(Paint.ANTI_ALIAS_FLAG); - private Paint mTrianglePaint = new Paint(Paint.ANTI_ALIAS_FLAG); - private Path mTrianglePath = new Path(); - private static final int STYLE_NORMAL = 0; - private static final int STYLE_TRIANGLE = 1; - private static final int STYLE_BLOCK = 2; - private int mIndicatorStyle = STYLE_NORMAL; - - private float mTabPadding; - private boolean mTabSpaceEqual; - private float mTabWidth; - - /** - * indicator - */ - private int mIndicatorColor; - private float mIndicatorHeight; - private float mIndicatorWidth; - private float mIndicatorCornerRadius; - private float mIndicatorMarginLeft; - private float mIndicatorMarginTop; - private float mIndicatorMarginRight; - private float mIndicatorMarginBottom; - private long mIndicatorAnimDuration; - private boolean mIndicatorAnimEnable; - private boolean mIndicatorBounceEnable; - private int mIndicatorGravity; - - /** - * underline - */ - private int mUnderlineColor; - private float mUnderlineHeight; - private int mUnderlineGravity; - - /** - * divider - */ - private int mDividerColor; - private float mDividerWidth; - private float mDividerPadding; - - /** - * title - */ - private static final int TEXT_BOLD_NONE = 0; - private static final int TEXT_BOLD_WHEN_SELECT = 1; - private static final int TEXT_BOLD_BOTH = 2; - private float mTextsize; - private int mTextSelectColor; - private int mTextUnselectColor; - private int mTextBold; - private boolean mTextAllCaps; - - /** - * icon - */ - private boolean mIconVisible; - private int mIconGravity; - private float mIconWidth; - private float mIconHeight; - private float mIconMargin; - - private int mHeight; - - /** - * anim - */ - private ValueAnimator mValueAnimator; - private OvershootInterpolator mInterpolator = new OvershootInterpolator(1.5f); - - private FragmentChangeManager mFragmentChangeManager; - - public CommonTabLayout(Context context) { - this(context, null, 0); - } - - public CommonTabLayout(Context context, AttributeSet attrs) { - this(context, attrs, 0); - } - - public CommonTabLayout(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - setWillNotDraw(false); - setClipChildren(false); - setClipToPadding(false); - - this.mContext = context; - mTabsContainer = new LinearLayout(context); - addView(mTabsContainer); - - obtainAttributes(context, attrs); - - //get layout_height - String height = attrs.getAttributeValue("http://schemas.android.com/apk/res/android", "layout_height"); - - //create ViewPager - if (height.equals(ViewGroup.LayoutParams.MATCH_PARENT + "")) { - } else if (height.equals(ViewGroup.LayoutParams.WRAP_CONTENT + "")) { - } else { - int[] systemAttrs = {android.R.attr.layout_height}; - TypedArray a = context.obtainStyledAttributes(attrs, systemAttrs); - mHeight = a.getDimensionPixelSize(0, ViewGroup.LayoutParams.WRAP_CONTENT); - a.recycle(); - } - - mValueAnimator = ValueAnimator.ofObject(new PointEvaluator(), mLastP, mCurrentP); - mValueAnimator.addUpdateListener(this); - } - - private void obtainAttributes(Context context, AttributeSet attrs) { - TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.CommonTabLayout); - - mIndicatorStyle = ta.getInt(R.styleable.CommonTabLayout_tl_indicator_style, 0); - mIndicatorColor = ta.getColor(R.styleable.CommonTabLayout_tl_indicator_color, Color.parseColor(mIndicatorStyle == STYLE_BLOCK ? "#4B6A87" : "#ffffff")); - mIndicatorHeight = ta.getDimension(R.styleable.CommonTabLayout_tl_indicator_height, - DisplayUtil.dp2px(context, mIndicatorStyle == STYLE_TRIANGLE ? 4 : (mIndicatorStyle == STYLE_BLOCK ? -1 : 2))); - mIndicatorWidth = ta.getDimension(R.styleable.CommonTabLayout_tl_indicator_width, DisplayUtil.dp2px(context, mIndicatorStyle == STYLE_TRIANGLE ? 10 : -1)); - mIndicatorCornerRadius = ta.getDimension(R.styleable.CommonTabLayout_tl_indicator_corner_radius, DisplayUtil.dp2px(context, mIndicatorStyle == STYLE_BLOCK ? -1 : 0)); - mIndicatorMarginLeft = ta.getDimension(R.styleable.CommonTabLayout_tl_indicator_margin_left, DisplayUtil.dp2px(context, 0)); - mIndicatorMarginTop = ta.getDimension(R.styleable.CommonTabLayout_tl_indicator_margin_top, DisplayUtil.dp2px(context, mIndicatorStyle == STYLE_BLOCK ? 7 : 0)); - mIndicatorMarginRight = ta.getDimension(R.styleable.CommonTabLayout_tl_indicator_margin_right, DisplayUtil.dp2px(context, 0)); - mIndicatorMarginBottom = ta.getDimension(R.styleable.CommonTabLayout_tl_indicator_margin_bottom, DisplayUtil.dp2px(context, mIndicatorStyle == STYLE_BLOCK ? 7 : 0)); - mIndicatorAnimEnable = ta.getBoolean(R.styleable.CommonTabLayout_tl_indicator_anim_enable, true); - mIndicatorBounceEnable = ta.getBoolean(R.styleable.CommonTabLayout_tl_indicator_bounce_enable, true); - mIndicatorAnimDuration = ta.getInt(R.styleable.CommonTabLayout_tl_indicator_anim_duration, -1); - mIndicatorGravity = ta.getInt(R.styleable.CommonTabLayout_tl_indicator_gravity, Gravity.BOTTOM); - - mUnderlineColor = ta.getColor(R.styleable.CommonTabLayout_tl_underline_color, Color.parseColor("#ffffff")); - mUnderlineHeight = ta.getDimension(R.styleable.CommonTabLayout_tl_underline_height, DisplayUtil.dp2px(context, 0)); - mUnderlineGravity = ta.getInt(R.styleable.CommonTabLayout_tl_underline_gravity, Gravity.BOTTOM); - - mDividerColor = ta.getColor(R.styleable.CommonTabLayout_tl_divider_color, Color.parseColor("#ffffff")); - mDividerWidth = ta.getDimension(R.styleable.CommonTabLayout_tl_divider_width, DisplayUtil.dp2px(context, 0)); - mDividerPadding = ta.getDimension(R.styleable.CommonTabLayout_tl_divider_padding, DisplayUtil.dp2px(context, 12)); - - mTextsize = ta.getDimension(R.styleable.CommonTabLayout_tl_textsize, DisplayUtil.sp2px(context, 13f)); - mTextSelectColor = ta.getColor(R.styleable.CommonTabLayout_tl_textSelectColor, Color.parseColor("#ffffff")); - mTextUnselectColor = ta.getColor(R.styleable.CommonTabLayout_tl_textUnselectColor, Color.parseColor("#AAffffff")); - mTextBold = ta.getInt(R.styleable.CommonTabLayout_tl_textBold, TEXT_BOLD_NONE); - mTextAllCaps = ta.getBoolean(R.styleable.CommonTabLayout_tl_textAllCaps, false); - - mIconVisible = ta.getBoolean(R.styleable.CommonTabLayout_tl_iconVisible, true); - mIconGravity = ta.getInt(R.styleable.CommonTabLayout_tl_iconGravity, Gravity.TOP); - mIconWidth = ta.getDimension(R.styleable.CommonTabLayout_tl_iconWidth, DisplayUtil.dp2px(context, 0)); - mIconHeight = ta.getDimension(R.styleable.CommonTabLayout_tl_iconHeight, DisplayUtil.dp2px(context, 0)); - mIconMargin = ta.getDimension(R.styleable.CommonTabLayout_tl_iconMargin, DisplayUtil.dp2px(context, 2.5f)); - - mTabSpaceEqual = ta.getBoolean(R.styleable.CommonTabLayout_tl_tab_space_equal, true); - mTabWidth = ta.getDimension(R.styleable.CommonTabLayout_tl_tab_width, DisplayUtil.dp2px(context, -1)); - mTabPadding = ta.getDimension(R.styleable.CommonTabLayout_tl_tab_padding, mTabSpaceEqual || mTabWidth > 0 ? DisplayUtil.dp2px(context, 0) : DisplayUtil.dp2px(context, 10)); - - ta.recycle(); - } - - public void setTabData(ArrayList tabEntitys) { - if (tabEntitys == null || tabEntitys.size() == 0) { - throw new IllegalStateException("TabEntitys can not be NULL or EMPTY !"); - } - - this.mTabEntitys.clear(); - this.mTabEntitys.addAll(tabEntitys); - - notifyDataSetChanged(); - } - - public void setTabData(ArrayList tabEntitys, FragmentActivity fa, int containerViewId, ArrayList fragments) { - mFragmentChangeManager = new FragmentChangeManager(fa.getSupportFragmentManager(), containerViewId, fragments); - setTabData(tabEntitys); - } - - public void notifyDataSetChanged() { - mTabsContainer.removeAllViews(); - this.mTabCount = mTabEntitys.size(); - View tabView; - for (int i = 0; i < mTabCount; i++) { - if (mIconGravity == Gravity.LEFT) { - tabView = View.inflate(mContext, R.layout.layout_tab_left, null); - } else if (mIconGravity == Gravity.RIGHT) { - tabView = View.inflate(mContext, R.layout.layout_tab_right, null); - } else if (mIconGravity == Gravity.BOTTOM) { - tabView = View.inflate(mContext, R.layout.layout_tab_bottom, null); - } else { - tabView = View.inflate(mContext, R.layout.layout_tab_top, null); - } - - tabView.setTag(i); - addTab(i, tabView); - } - - updateTabStyles(); - } - - private void addTab(final int position, View tabView) { - TextView tv_tab_title = tabView.findViewById(R.id.tv_tab_title); - tv_tab_title.setText(mTabEntitys.get(position).getTabTitle()); - ImageView iv_tab_icon = tabView.findViewById(R.id.iv_tab_icon); - iv_tab_icon.setImageResource(mTabEntitys.get(position).getTabUnselectedIcon()); - - tabView.setOnClickListener(v -> { - int position1 = (Integer) v.getTag(); - if (mCurrentTab != position1) { - setCurrentTab(position1); - if (mListener != null) { - mListener.onTabSelect(position1); - } - } else { - if (mListener != null) { - mListener.onTabReselect(position1); - } - } - }); - - LinearLayout.LayoutParams lp_tab = mTabSpaceEqual ? - new LinearLayout.LayoutParams(0, LayoutParams.MATCH_PARENT, 1.0f) : - new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT); - if (mTabWidth > 0) { - lp_tab = new LinearLayout.LayoutParams((int) mTabWidth, LayoutParams.MATCH_PARENT); - } - mTabsContainer.addView(tabView, position, lp_tab); - } - - private void updateTabStyles() { - for (int i = 0; i < mTabCount; i++) { - View tabView = mTabsContainer.getChildAt(i); - tabView.setPadding((int) mTabPadding, 0, (int) mTabPadding, 0); - TextView tv_tab_title = (TextView) tabView.findViewById(R.id.tv_tab_title); - tv_tab_title.setTextColor(i == mCurrentTab ? mTextSelectColor : mTextUnselectColor); - tv_tab_title.setTextSize(TypedValue.COMPLEX_UNIT_PX, mTextsize); - if (mTextAllCaps) { - tv_tab_title.setText(tv_tab_title.getText().toString().toUpperCase()); - } - - if (mTextBold == TEXT_BOLD_BOTH) { - tv_tab_title.getPaint().setFakeBoldText(true); - } else if (mTextBold == TEXT_BOLD_NONE) { - tv_tab_title.getPaint().setFakeBoldText(false); - } - - ImageView iv_tab_icon = (ImageView) tabView.findViewById(R.id.iv_tab_icon); - if (mIconVisible) { - iv_tab_icon.setVisibility(View.VISIBLE); - CustomTabEntity tabEntity = mTabEntitys.get(i); - iv_tab_icon.setImageResource(i == mCurrentTab ? tabEntity.getTabSelectedIcon() : tabEntity.getTabUnselectedIcon()); - LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams( - mIconWidth <= 0 ? LinearLayout.LayoutParams.WRAP_CONTENT : (int) mIconWidth, - mIconHeight <= 0 ? LinearLayout.LayoutParams.WRAP_CONTENT : (int) mIconHeight); - if (mIconGravity == Gravity.LEFT) { - lp.rightMargin = (int) mIconMargin; - } else if (mIconGravity == Gravity.RIGHT) { - lp.leftMargin = (int) mIconMargin; - } else if (mIconGravity == Gravity.BOTTOM) { - lp.topMargin = (int) mIconMargin; - } else { - lp.bottomMargin = (int) mIconMargin; - } - - iv_tab_icon.setLayoutParams(lp); - } else { - iv_tab_icon.setVisibility(View.GONE); - } - } - } - - private void updateTabSelection(int position) { - for (int i = 0; i < mTabCount; ++i) { - View tabView = mTabsContainer.getChildAt(i); - final boolean isSelect = i == position; - TextView tab_title = (TextView) tabView.findViewById(R.id.tv_tab_title); - tab_title.setTextColor(isSelect ? mTextSelectColor : mTextUnselectColor); - ImageView iv_tab_icon = (ImageView) tabView.findViewById(R.id.iv_tab_icon); - CustomTabEntity tabEntity = mTabEntitys.get(i); - iv_tab_icon.setImageResource(isSelect ? tabEntity.getTabSelectedIcon() : tabEntity.getTabUnselectedIcon()); - if (mTextBold == TEXT_BOLD_WHEN_SELECT) { - tab_title.getPaint().setFakeBoldText(isSelect); - } - } - } - - private void calcOffset() { - final View currentTabView = mTabsContainer.getChildAt(this.mCurrentTab); - mCurrentP.left = currentTabView.getLeft(); - mCurrentP.right = currentTabView.getRight(); - - final View lastTabView = mTabsContainer.getChildAt(this.mLastTab); - mLastP.left = lastTabView.getLeft(); - mLastP.right = lastTabView.getRight(); - - if (mLastP.left == mCurrentP.left && mLastP.right == mCurrentP.right) { - invalidate(); - } else { - mValueAnimator.setObjectValues(mLastP, mCurrentP); - if (mIndicatorBounceEnable) { - mValueAnimator.setInterpolator(mInterpolator); - } - - if (mIndicatorAnimDuration < 0) { - mIndicatorAnimDuration = mIndicatorBounceEnable ? 500 : 250; - } - mValueAnimator.setDuration(mIndicatorAnimDuration); - mValueAnimator.start(); - } - } - - private void calcIndicatorRect() { - View currentTabView = mTabsContainer.getChildAt(this.mCurrentTab); - float left = currentTabView.getLeft(); - float right = currentTabView.getRight(); - - mIndicatorRect.left = (int) left; - mIndicatorRect.right = (int) right; - - if (mIndicatorWidth < 0) { - - } else { - float indicatorLeft = currentTabView.getLeft() + (currentTabView.getWidth() - mIndicatorWidth) / 2; - - mIndicatorRect.left = (int) indicatorLeft; - mIndicatorRect.right = (int) (mIndicatorRect.left + mIndicatorWidth); - } - } - - @Override - public void onAnimationUpdate(ValueAnimator animation) { - View currentTabView = mTabsContainer.getChildAt(this.mCurrentTab); - IndicatorPoint p = (IndicatorPoint) animation.getAnimatedValue(); - mIndicatorRect.left = (int) p.left; - mIndicatorRect.right = (int) p.right; - - if (mIndicatorWidth < 0) { - - } else { - float indicatorLeft = p.left + (currentTabView.getWidth() - mIndicatorWidth) / 2; - - mIndicatorRect.left = (int) indicatorLeft; - mIndicatorRect.right = (int) (mIndicatorRect.left + mIndicatorWidth); - } - invalidate(); - } - - private boolean mIsFirstDraw = true; - - @Override - protected void onDraw(Canvas canvas) { - super.onDraw(canvas); - - if (isInEditMode() || mTabCount <= 0) { - return; - } - - int height = getHeight(); - int paddingLeft = getPaddingLeft(); - // draw divider - if (mDividerWidth > 0) { - mDividerPaint.setStrokeWidth(mDividerWidth); - mDividerPaint.setColor(mDividerColor); - for (int i = 0; i < mTabCount - 1; i++) { - View tab = mTabsContainer.getChildAt(i); - canvas.drawLine(paddingLeft + tab.getRight(), mDividerPadding, paddingLeft + tab.getRight(), height - mDividerPadding, mDividerPaint); - } - } - - // draw underline - if (mUnderlineHeight > 0) { - mRectPaint.setColor(mUnderlineColor); - if (mUnderlineGravity == Gravity.BOTTOM) { - canvas.drawRect(paddingLeft, height - mUnderlineHeight, mTabsContainer.getWidth() + paddingLeft, height, mRectPaint); - } else { - canvas.drawRect(paddingLeft, 0, mTabsContainer.getWidth() + paddingLeft, mUnderlineHeight, mRectPaint); - } - } - - //draw indicator line - if (mIndicatorAnimEnable) { - if (mIsFirstDraw) { - mIsFirstDraw = false; - calcIndicatorRect(); - } - } else { - calcIndicatorRect(); - } - - - if (mIndicatorStyle == STYLE_TRIANGLE) { - if (mIndicatorHeight > 0) { - mTrianglePaint.setColor(mIndicatorColor); - mTrianglePath.reset(); - mTrianglePath.moveTo(paddingLeft + mIndicatorRect.left, height); - mTrianglePath.lineTo(paddingLeft + mIndicatorRect.left / 2 + mIndicatorRect.right / 2, height - mIndicatorHeight); - mTrianglePath.lineTo(paddingLeft + mIndicatorRect.right, height); - mTrianglePath.close(); - canvas.drawPath(mTrianglePath, mTrianglePaint); - } - } else if (mIndicatorStyle == STYLE_BLOCK) { - if (mIndicatorHeight < 0) { - mIndicatorHeight = height - mIndicatorMarginTop - mIndicatorMarginBottom; - } else { - - } - - if (mIndicatorHeight > 0) { - if (mIndicatorCornerRadius < 0 || mIndicatorCornerRadius > mIndicatorHeight / 2) { - mIndicatorCornerRadius = mIndicatorHeight / 2; - } - - mIndicatorDrawable.setColor(mIndicatorColor); - mIndicatorDrawable.setBounds(paddingLeft + (int) mIndicatorMarginLeft + mIndicatorRect.left, - (int) mIndicatorMarginTop, (int) (paddingLeft + mIndicatorRect.right - mIndicatorMarginRight), - (int) (mIndicatorMarginTop + mIndicatorHeight)); - mIndicatorDrawable.setCornerRadius(mIndicatorCornerRadius); - mIndicatorDrawable.draw(canvas); - } - } else { - if (mIndicatorHeight > 0) { - mIndicatorDrawable.setColor(mIndicatorColor); - if (mIndicatorGravity == Gravity.BOTTOM) { - mIndicatorDrawable.setBounds(paddingLeft + (int) mIndicatorMarginLeft + mIndicatorRect.left, - height - (int) mIndicatorHeight - (int) mIndicatorMarginBottom, - paddingLeft + mIndicatorRect.right - (int) mIndicatorMarginRight, - height - (int) mIndicatorMarginBottom); - } else { - mIndicatorDrawable.setBounds(paddingLeft + (int) mIndicatorMarginLeft + mIndicatorRect.left, - (int) mIndicatorMarginTop, - paddingLeft + mIndicatorRect.right - (int) mIndicatorMarginRight, - (int) mIndicatorHeight + (int) mIndicatorMarginTop); - } - mIndicatorDrawable.setCornerRadius(mIndicatorCornerRadius); - mIndicatorDrawable.draw(canvas); - } - } - } - - //setter and getter - public void setCurrentTab(int currentTab) { - mLastTab = this.mCurrentTab; - this.mCurrentTab = currentTab; - updateTabSelection(currentTab); - if (mFragmentChangeManager != null) { - mFragmentChangeManager.setFragments(currentTab); - } - if (mIndicatorAnimEnable) { - calcOffset(); - } else { - invalidate(); - } - } - - public void setIndicatorStyle(int indicatorStyle) { - this.mIndicatorStyle = indicatorStyle; - invalidate(); - } - - public void setTabPadding(float tabPadding) { - this.mTabPadding = DisplayUtil.dp2px(mContext, tabPadding); - updateTabStyles(); - } - - public void setTabSpaceEqual(boolean tabSpaceEqual) { - this.mTabSpaceEqual = tabSpaceEqual; - updateTabStyles(); - } - - public void setTabWidth(float tabWidth) { - this.mTabWidth = DisplayUtil.dp2px(mContext, tabWidth); - updateTabStyles(); - } - - public void setIndicatorColor(int indicatorColor) { - this.mIndicatorColor = indicatorColor; - invalidate(); - } - - public void setIndicatorHeight(float indicatorHeight) { - this.mIndicatorHeight = DisplayUtil.dp2px(mContext, indicatorHeight); - invalidate(); - } - - public void setIndicatorWidth(float indicatorWidth) { - this.mIndicatorWidth = DisplayUtil.dp2px(mContext, indicatorWidth); - invalidate(); - } - - public void setIndicatorCornerRadius(float indicatorCornerRadius) { - this.mIndicatorCornerRadius = DisplayUtil.dp2px(mContext, indicatorCornerRadius); - invalidate(); - } - - public void setIndicatorGravity(int indicatorGravity) { - this.mIndicatorGravity = indicatorGravity; - invalidate(); - } - - public void setIndicatorMargin(float indicatorMarginLeft, float indicatorMarginTop, - float indicatorMarginRight, float indicatorMarginBottom) { - this.mIndicatorMarginLeft = DisplayUtil.dp2px(mContext, indicatorMarginLeft); - this.mIndicatorMarginTop = DisplayUtil.dp2px(mContext, indicatorMarginTop); - this.mIndicatorMarginRight = DisplayUtil.dp2px(mContext, indicatorMarginRight); - this.mIndicatorMarginBottom = DisplayUtil.dp2px(mContext, indicatorMarginBottom); - invalidate(); - } - - public void setIndicatorAnimDuration(long indicatorAnimDuration) { - this.mIndicatorAnimDuration = indicatorAnimDuration; - } - - public void setIndicatorAnimEnable(boolean indicatorAnimEnable) { - this.mIndicatorAnimEnable = indicatorAnimEnable; - } - - public void setIndicatorBounceEnable(boolean indicatorBounceEnable) { - this.mIndicatorBounceEnable = indicatorBounceEnable; - } - - public void setUnderlineColor(int underlineColor) { - this.mUnderlineColor = underlineColor; - invalidate(); - } - - public void setUnderlineHeight(float underlineHeight) { - this.mUnderlineHeight = DisplayUtil.dp2px(mContext, underlineHeight); - invalidate(); - } - - public void setUnderlineGravity(int underlineGravity) { - this.mUnderlineGravity = underlineGravity; - invalidate(); - } - - public void setDividerColor(int dividerColor) { - this.mDividerColor = dividerColor; - invalidate(); - } - - public void setDividerWidth(float dividerWidth) { - this.mDividerWidth = DisplayUtil.dp2px(mContext, dividerWidth); - invalidate(); - } - - public void setDividerPadding(float dividerPadding) { - this.mDividerPadding = DisplayUtil.dp2px(mContext, dividerPadding); - invalidate(); - } - - public void setTextsize(float textsize) { - this.mTextsize = DisplayUtil.sp2px(mContext, textsize); - updateTabStyles(); - } - - public void setTextSelectColor(int textSelectColor) { - this.mTextSelectColor = textSelectColor; - updateTabStyles(); - } - - public void setTextUnselectColor(int textUnselectColor) { - this.mTextUnselectColor = textUnselectColor; - updateTabStyles(); - } - - public void setTextBold(int textBold) { - this.mTextBold = textBold; - updateTabStyles(); - } - - public void setIconVisible(boolean iconVisible) { - this.mIconVisible = iconVisible; - updateTabStyles(); - } - - public void setIconGravity(int iconGravity) { - this.mIconGravity = iconGravity; - notifyDataSetChanged(); - } - - public void setIconWidth(float iconWidth) { - this.mIconWidth = DisplayUtil.dp2px(mContext, iconWidth); - updateTabStyles(); - } - - public void setIconHeight(float iconHeight) { - this.mIconHeight = DisplayUtil.dp2px(mContext, iconHeight); - updateTabStyles(); - } - - public void setIconMargin(float iconMargin) { - this.mIconMargin = DisplayUtil.dp2px(mContext, iconMargin); - updateTabStyles(); - } - - public void setTextAllCaps(boolean textAllCaps) { - this.mTextAllCaps = textAllCaps; - updateTabStyles(); - } - - - public int getTabCount() { - return mTabCount; - } - - public int getCurrentTab() { - return mCurrentTab; - } - - public int getIndicatorStyle() { - return mIndicatorStyle; - } - - public float getTabPadding() { - return mTabPadding; - } - - public boolean isTabSpaceEqual() { - return mTabSpaceEqual; - } - - public float getTabWidth() { - return mTabWidth; - } - - public int getIndicatorColor() { - return mIndicatorColor; - } - - public float getIndicatorHeight() { - return mIndicatorHeight; - } - - public float getIndicatorWidth() { - return mIndicatorWidth; - } - - public float getIndicatorCornerRadius() { - return mIndicatorCornerRadius; - } - - public float getIndicatorMarginLeft() { - return mIndicatorMarginLeft; - } - - public float getIndicatorMarginTop() { - return mIndicatorMarginTop; - } - - public float getIndicatorMarginRight() { - return mIndicatorMarginRight; - } - - public float getIndicatorMarginBottom() { - return mIndicatorMarginBottom; - } - - public long getIndicatorAnimDuration() { - return mIndicatorAnimDuration; - } - - public boolean isIndicatorAnimEnable() { - return mIndicatorAnimEnable; - } - - public boolean isIndicatorBounceEnable() { - return mIndicatorBounceEnable; - } - - public int getUnderlineColor() { - return mUnderlineColor; - } - - public float getUnderlineHeight() { - return mUnderlineHeight; - } - - public int getDividerColor() { - return mDividerColor; - } - - public float getDividerWidth() { - return mDividerWidth; - } - - public float getDividerPadding() { - return mDividerPadding; - } - - public float getTextsize() { - return mTextsize; - } - - public int getTextSelectColor() { - return mTextSelectColor; - } - - public int getTextUnselectColor() { - return mTextUnselectColor; - } - - public int getTextBold() { - return mTextBold; - } - - public boolean isTextAllCaps() { - return mTextAllCaps; - } - - public int getIconGravity() { - return mIconGravity; - } - - public float getIconWidth() { - return mIconWidth; - } - - public float getIconHeight() { - return mIconHeight; - } - - public float getIconMargin() { - return mIconMargin; - } - - public boolean isIconVisible() { - return mIconVisible; - } - - - public ImageView getIconView(int tab) { - View tabView = mTabsContainer.getChildAt(tab); - ImageView iv_tab_icon = (ImageView) tabView.findViewById(R.id.iv_tab_icon); - return iv_tab_icon; - } - - public TextView getTitleView(int tab) { - View tabView = mTabsContainer.getChildAt(tab); - TextView tv_tab_title = (TextView) tabView.findViewById(R.id.tv_tab_title); - return tv_tab_title; - } - - - // show MsgTipView - private Paint mTextPaint = new Paint(Paint.ANTI_ALIAS_FLAG); - private SparseArray mInitSetMap = new SparseArray<>(); - - - public void showMsg(int position, int num) { - if (position >= mTabCount) { - position = mTabCount - 1; - } - - View tabView = mTabsContainer.getChildAt(position); - MsgView tipView = (MsgView) tabView.findViewById(R.id.rtv_msg_tip); - if (tipView != null) { - UnreadMsgUtils.show(tipView, num); - - if (mInitSetMap.get(position) != null && mInitSetMap.get(position)) { - return; - } - - if (!mIconVisible) { - setMsgMargin(position, 2, 2); - } else { - setMsgMargin(position, 0, - mIconGravity == Gravity.LEFT || mIconGravity == Gravity.RIGHT ? 4 : 0); - } - - mInitSetMap.put(position, true); - } - } - - public void showDot(int position) { - if (position >= mTabCount) { - position = mTabCount - 1; - } - showMsg(position, 0); - } - - public void hideMsg(int position) { - if (position >= mTabCount) { - position = mTabCount - 1; - } - - View tabView = mTabsContainer.getChildAt(position); - MsgView tipView = (MsgView) tabView.findViewById(R.id.rtv_msg_tip); - if (tipView != null) { - tipView.setVisibility(View.GONE); - } - } - - public void setMsgMargin(int position, float leftPadding, float bottomPadding) { - if (position >= mTabCount) { - position = mTabCount - 1; - } - View tabView = mTabsContainer.getChildAt(position); - MsgView tipView = (MsgView) tabView.findViewById(R.id.rtv_msg_tip); - if (tipView != null) { - TextView tv_tab_title = (TextView) tabView.findViewById(R.id.tv_tab_title); - mTextPaint.setTextSize(mTextsize); - float textWidth = mTextPaint.measureText(tv_tab_title.getText().toString()); - float textHeight = mTextPaint.descent() - mTextPaint.ascent(); - MarginLayoutParams lp = (MarginLayoutParams) tipView.getLayoutParams(); - - float iconH = mIconHeight; - float margin = 0; - if (mIconVisible) { - if (iconH <= 0) { - iconH = mContext.getResources().getDrawable(mTabEntitys.get(position).getTabSelectedIcon()).getIntrinsicHeight(); - } - margin = mIconMargin; - } - - if (mIconGravity == Gravity.TOP || mIconGravity == Gravity.BOTTOM) { - lp.leftMargin = DisplayUtil.dp2px(mContext, leftPadding); - lp.topMargin = mHeight > 0 ? (int) (mHeight - textHeight - iconH - margin) / 2 - DisplayUtil.dp2px(mContext, bottomPadding) : DisplayUtil.dp2px(mContext, bottomPadding); - } else { - lp.leftMargin = DisplayUtil.dp2px(mContext, leftPadding); - lp.topMargin = mHeight > 0 ? (int) (mHeight - Math.max(textHeight, iconH)) / 2 - DisplayUtil.dp2px(mContext, bottomPadding) : DisplayUtil.dp2px(mContext, bottomPadding); - } - - tipView.setLayoutParams(lp); - } - } - - public MsgView getMsgView(int position) { - if (position >= mTabCount) { - position = mTabCount - 1; - } - View tabView = mTabsContainer.getChildAt(position); - MsgView tipView = (MsgView) tabView.findViewById(R.id.rtv_msg_tip); - return tipView; - } - - private OnTabSelectListener mListener; - - public void setOnTabSelectListener(OnTabSelectListener listener) { - this.mListener = listener; - } - - - @Override - protected Parcelable onSaveInstanceState() { - Bundle bundle = new Bundle(); - bundle.putParcelable("instanceState", super.onSaveInstanceState()); - bundle.putInt("mCurrentTab", mCurrentTab); - return bundle; - } - - @Override - protected void onRestoreInstanceState(Parcelable state) { - if (state instanceof Bundle) { - Bundle bundle = (Bundle) state; - mCurrentTab = bundle.getInt("mCurrentTab"); - state = bundle.getParcelable("instanceState"); - if (mCurrentTab != 0 && mTabsContainer.getChildCount() > 0) { - updateTabSelection(mCurrentTab); - } - } - super.onRestoreInstanceState(state); - } - - class IndicatorPoint { - public float left; - public float right; - } - - private IndicatorPoint mCurrentP = new IndicatorPoint(); - private IndicatorPoint mLastP = new IndicatorPoint(); - - class PointEvaluator implements TypeEvaluator { - @Override - public IndicatorPoint evaluate(float fraction, IndicatorPoint startValue, IndicatorPoint endValue) { - float left = startValue.left + fraction * (endValue.left - startValue.left); - float right = startValue.right + fraction * (endValue.right - startValue.right); - IndicatorPoint point = new IndicatorPoint(); - point.left = left; - point.right = right; - return point; - } - } - -} diff --git a/model_zoo/official/lite/MindSpore_inhand/customView/src/main/java/com/mindspore/customview/tablayout/SegmentTabLayout.java b/model_zoo/official/lite/MindSpore_inhand/customView/src/main/java/com/mindspore/customview/tablayout/SegmentTabLayout.java deleted file mode 100644 index b3136695559..00000000000 --- a/model_zoo/official/lite/MindSpore_inhand/customView/src/main/java/com/mindspore/customview/tablayout/SegmentTabLayout.java +++ /dev/null @@ -1,749 +0,0 @@ -/** - * Copyright 2021 Huawei Technologies Co., Ltd - *

- * 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.mindspore.customview.tablayout; - -import android.animation.TypeEvaluator; -import android.animation.ValueAnimator; -import android.content.Context; -import android.content.res.TypedArray; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.graphics.Rect; -import android.graphics.drawable.GradientDrawable; -import android.os.Bundle; -import android.os.Parcelable; -import android.util.AttributeSet; -import android.util.SparseArray; -import android.util.TypedValue; -import android.view.View; -import android.view.ViewGroup; -import android.view.animation.OvershootInterpolator; -import android.widget.FrameLayout; -import android.widget.LinearLayout; -import android.widget.TextView; - -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentActivity; - -import com.mindspore.common.utils.DisplayUtil; -import com.mindspore.customview.R; -import com.mindspore.customview.tablayout.listener.OnTabSelectListener; -import com.mindspore.customview.tablayout.utils.FragmentChangeManager; -import com.mindspore.customview.tablayout.utils.UnreadMsgUtils; -import com.mindspore.customview.tablayout.widget.MsgView; - -import java.util.ArrayList; - - -public class SegmentTabLayout extends FrameLayout implements ValueAnimator.AnimatorUpdateListener { - private Context mContext; - private String[] mTitles; - private LinearLayout mTabsContainer; - private int mCurrentTab; - private int mLastTab; - private int mTabCount; - - private Rect mIndicatorRect = new Rect(); - private GradientDrawable mIndicatorDrawable = new GradientDrawable(); - private GradientDrawable mRectDrawable = new GradientDrawable(); - - private Paint mDividerPaint = new Paint(Paint.ANTI_ALIAS_FLAG); - - private float mTabPadding; - private boolean mTabSpaceEqual; - private float mTabWidth; - - /** - * indicator - */ - private int mIndicatorColor; - private float mIndicatorHeight; - private float mIndicatorCornerRadius; - private float mIndicatorMarginLeft; - private float mIndicatorMarginTop; - private float mIndicatorMarginRight; - private float mIndicatorMarginBottom; - private long mIndicatorAnimDuration; - private boolean mIndicatorAnimEnable; - private boolean mIndicatorBounceEnable; - - /** - * divider - */ - private int mDividerColor; - private float mDividerWidth; - private float mDividerPadding; - - /** - * title - */ - private static final int TEXT_BOLD_NONE = 0; - private static final int TEXT_BOLD_WHEN_SELECT = 1; - private static final int TEXT_BOLD_BOTH = 2; - private float mTextsize; - private int mTextSelectColor; - private int mTextUnselectColor; - private int mTextBold; - private boolean mTextAllCaps; - - private int mBarColor; - private int mBarStrokeColor; - private float mBarStrokeWidth; - - private int mHeight; - - /** - * anim - */ - private ValueAnimator mValueAnimator; - private OvershootInterpolator mInterpolator = new OvershootInterpolator(0.8f); - - private FragmentChangeManager mFragmentChangeManager; - private float[] mRadiusArr = new float[8]; - - public SegmentTabLayout(Context context) { - this(context, null, 0); - } - - public SegmentTabLayout(Context context, AttributeSet attrs) { - this(context, attrs, 0); - } - - public SegmentTabLayout(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - setWillNotDraw(false);//重写onDraw方法,需要调用这个方法来清除flag - setClipChildren(false); - setClipToPadding(false); - - this.mContext = context; - mTabsContainer = new LinearLayout(context); - addView(mTabsContainer); - - obtainAttributes(context, attrs); - - //get layout_height - String height = attrs.getAttributeValue("http://schemas.android.com/apk/res/android", "layout_height"); - - //create ViewPager - if (height.equals(ViewGroup.LayoutParams.MATCH_PARENT + "")) { - } else if (height.equals(ViewGroup.LayoutParams.WRAP_CONTENT + "")) { - } else { - int[] systemAttrs = {android.R.attr.layout_height}; - TypedArray a = context.obtainStyledAttributes(attrs, systemAttrs); - mHeight = a.getDimensionPixelSize(0, ViewGroup.LayoutParams.WRAP_CONTENT); - a.recycle(); - } - - mValueAnimator = ValueAnimator.ofObject(new PointEvaluator(), mLastP, mCurrentP); - mValueAnimator.addUpdateListener(this); - } - - private void obtainAttributes(Context context, AttributeSet attrs) { - TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.SegmentTabLayout); - - mIndicatorColor = ta.getColor(R.styleable.SegmentTabLayout_tl_indicator_color, Color.parseColor("#222831")); - mIndicatorHeight = ta.getDimension(R.styleable.SegmentTabLayout_tl_indicator_height, -1); - mIndicatorCornerRadius = ta.getDimension(R.styleable.SegmentTabLayout_tl_indicator_corner_radius, -1); - mIndicatorMarginLeft = ta.getDimension(R.styleable.SegmentTabLayout_tl_indicator_margin_left, DisplayUtil.dp2px(context, 0)); - mIndicatorMarginTop = ta.getDimension(R.styleable.SegmentTabLayout_tl_indicator_margin_top, 0); - mIndicatorMarginRight = ta.getDimension(R.styleable.SegmentTabLayout_tl_indicator_margin_right, DisplayUtil.dp2px(context, 0)); - mIndicatorMarginBottom = ta.getDimension(R.styleable.SegmentTabLayout_tl_indicator_margin_bottom, 0); - mIndicatorAnimEnable = ta.getBoolean(R.styleable.SegmentTabLayout_tl_indicator_anim_enable, false); - mIndicatorBounceEnable = ta.getBoolean(R.styleable.SegmentTabLayout_tl_indicator_bounce_enable, true); - mIndicatorAnimDuration = ta.getInt(com.mindspore.customview.R.styleable.SegmentTabLayout_tl_indicator_anim_duration, -1); - - mDividerColor = ta.getColor(R.styleable.SegmentTabLayout_tl_divider_color, mIndicatorColor); - mDividerWidth = ta.getDimension(R.styleable.SegmentTabLayout_tl_divider_width, DisplayUtil.dp2px(context, 1)); - mDividerPadding = ta.getDimension(R.styleable.SegmentTabLayout_tl_divider_padding, 0); - - mTextsize = ta.getDimension(R.styleable.SegmentTabLayout_tl_textsize, DisplayUtil.sp2px(context, 13f)); - mTextSelectColor = ta.getColor(R.styleable.SegmentTabLayout_tl_textSelectColor, Color.parseColor("#ffffff")); - mTextUnselectColor = ta.getColor(R.styleable.SegmentTabLayout_tl_textUnselectColor, mIndicatorColor); - mTextBold = ta.getInt(R.styleable.SegmentTabLayout_tl_textBold, TEXT_BOLD_NONE); - mTextAllCaps = ta.getBoolean(R.styleable.SegmentTabLayout_tl_textAllCaps, false); - - mTabSpaceEqual = ta.getBoolean(R.styleable.SegmentTabLayout_tl_tab_space_equal, true); - mTabWidth = ta.getDimension(R.styleable.SegmentTabLayout_tl_tab_width, DisplayUtil.dp2px(context, -1)); - mTabPadding = ta.getDimension(R.styleable.SegmentTabLayout_tl_tab_padding, mTabSpaceEqual || mTabWidth > 0 ? DisplayUtil.dp2px(context, 0) : DisplayUtil.dp2px(context, 10)); - - mBarColor = ta.getColor(R.styleable.SegmentTabLayout_tl_bar_color, Color.TRANSPARENT); - mBarStrokeColor = ta.getColor(R.styleable.SegmentTabLayout_tl_bar_stroke_color, mIndicatorColor); - mBarStrokeWidth = ta.getDimension(R.styleable.SegmentTabLayout_tl_bar_stroke_width, DisplayUtil.dp2px(context, 1)); - - ta.recycle(); - } - - public void setTabData(String[] titles) { - if (titles == null || titles.length == 0) { - throw new IllegalStateException("Titles can not be NULL or EMPTY !"); - } - - this.mTitles = titles; - - notifyDataSetChanged(); - } - - public void setTabData(String[] titles, FragmentActivity fa, int containerViewId, ArrayList fragments) { - mFragmentChangeManager = new FragmentChangeManager(fa.getSupportFragmentManager(), containerViewId, fragments); - setTabData(titles); - } - - public void notifyDataSetChanged() { - mTabsContainer.removeAllViews(); - this.mTabCount = mTitles.length; - View tabView; - for (int i = 0; i < mTabCount; i++) { - tabView = View.inflate(mContext, R.layout.layout_tab_segment, null); - tabView.setTag(i); - addTab(i, tabView); - } - - updateTabStyles(); - } - - private void addTab(final int position, View tabView) { - TextView tv_tab_title = (TextView) tabView.findViewById(R.id.tv_tab_title); - tv_tab_title.setText(mTitles[position]); - - tabView.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - int position = (Integer) v.getTag(); - if (mCurrentTab != position) { - setCurrentTab(position); - if (mListener != null) { - mListener.onTabSelect(position); - } - } else { - if (mListener != null) { - mListener.onTabReselect(position); - } - } - } - }); - - /** 每一个Tab的布局参数 */ - LinearLayout.LayoutParams lp_tab = mTabSpaceEqual ? - new LinearLayout.LayoutParams(0, LayoutParams.MATCH_PARENT, 1.0f) : - new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT); - if (mTabWidth > 0) { - lp_tab = new LinearLayout.LayoutParams((int) mTabWidth, LayoutParams.MATCH_PARENT); - } - mTabsContainer.addView(tabView, position, lp_tab); - } - - private void updateTabStyles() { - for (int i = 0; i < mTabCount; i++) { - View tabView = mTabsContainer.getChildAt(i); - tabView.setPadding((int) mTabPadding, 0, (int) mTabPadding, 0); - TextView tv_tab_title = (TextView) tabView.findViewById(R.id.tv_tab_title); - tv_tab_title.setTextColor(i == mCurrentTab ? mTextSelectColor : mTextUnselectColor); - tv_tab_title.setTextSize(TypedValue.COMPLEX_UNIT_PX, mTextsize); - if (mTextAllCaps) { - tv_tab_title.setText(tv_tab_title.getText().toString().toUpperCase()); - } - - if (mTextBold == TEXT_BOLD_BOTH) { - tv_tab_title.getPaint().setFakeBoldText(true); - } else if (mTextBold == TEXT_BOLD_NONE) { - tv_tab_title.getPaint().setFakeBoldText(false); - } - } - } - - private void updateTabSelection(int position) { - for (int i = 0; i < mTabCount; ++i) { - View tabView = mTabsContainer.getChildAt(i); - final boolean isSelect = i == position; - TextView tab_title = (TextView) tabView.findViewById(R.id.tv_tab_title); - tab_title.setTextColor(isSelect ? mTextSelectColor : mTextUnselectColor); - if (mTextBold == TEXT_BOLD_WHEN_SELECT) { - tab_title.getPaint().setFakeBoldText(isSelect); - } - } - } - - private void calcOffset() { - final View currentTabView = mTabsContainer.getChildAt(this.mCurrentTab); - mCurrentP.left = currentTabView.getLeft(); - mCurrentP.right = currentTabView.getRight(); - - final View lastTabView = mTabsContainer.getChildAt(this.mLastTab); - mLastP.left = lastTabView.getLeft(); - mLastP.right = lastTabView.getRight(); - - if (mLastP.left == mCurrentP.left && mLastP.right == mCurrentP.right) { - invalidate(); - } else { - mValueAnimator.setObjectValues(mLastP, mCurrentP); - if (mIndicatorBounceEnable) { - mValueAnimator.setInterpolator(mInterpolator); - } - - if (mIndicatorAnimDuration < 0) { - mIndicatorAnimDuration = mIndicatorBounceEnable ? 500 : 250; - } - mValueAnimator.setDuration(mIndicatorAnimDuration); - mValueAnimator.start(); - } - } - - private void calcIndicatorRect() { - View currentTabView = mTabsContainer.getChildAt(this.mCurrentTab); - float left = currentTabView.getLeft(); - float right = currentTabView.getRight(); - - mIndicatorRect.left = (int) left; - mIndicatorRect.right = (int) right; - - if (!mIndicatorAnimEnable) { - if (mCurrentTab == 0) { - /**The corners are ordered top-left, top-right, bottom-right, bottom-left*/ - mRadiusArr[0] = mIndicatorCornerRadius; - mRadiusArr[1] = mIndicatorCornerRadius; - mRadiusArr[2] = 0; - mRadiusArr[3] = 0; - mRadiusArr[4] = 0; - mRadiusArr[5] = 0; - mRadiusArr[6] = mIndicatorCornerRadius; - mRadiusArr[7] = mIndicatorCornerRadius; - } else if (mCurrentTab == mTabCount - 1) { - /**The corners are ordered top-left, top-right, bottom-right, bottom-left*/ - mRadiusArr[0] = 0; - mRadiusArr[1] = 0; - mRadiusArr[2] = mIndicatorCornerRadius; - mRadiusArr[3] = mIndicatorCornerRadius; - mRadiusArr[4] = mIndicatorCornerRadius; - mRadiusArr[5] = mIndicatorCornerRadius; - mRadiusArr[6] = 0; - mRadiusArr[7] = 0; - } else { - /**The corners are ordered top-left, top-right, bottom-right, bottom-left*/ - mRadiusArr[0] = 0; - mRadiusArr[1] = 0; - mRadiusArr[2] = 0; - mRadiusArr[3] = 0; - mRadiusArr[4] = 0; - mRadiusArr[5] = 0; - mRadiusArr[6] = 0; - mRadiusArr[7] = 0; - } - } else { - /**The corners are ordered top-left, top-right, bottom-right, bottom-left*/ - mRadiusArr[0] = mIndicatorCornerRadius; - mRadiusArr[1] = mIndicatorCornerRadius; - mRadiusArr[2] = mIndicatorCornerRadius; - mRadiusArr[3] = mIndicatorCornerRadius; - mRadiusArr[4] = mIndicatorCornerRadius; - mRadiusArr[5] = mIndicatorCornerRadius; - mRadiusArr[6] = mIndicatorCornerRadius; - mRadiusArr[7] = mIndicatorCornerRadius; - } - } - - @Override - public void onAnimationUpdate(ValueAnimator animation) { - IndicatorPoint p = (IndicatorPoint) animation.getAnimatedValue(); - mIndicatorRect.left = (int) p.left; - mIndicatorRect.right = (int) p.right; - invalidate(); - } - - private boolean mIsFirstDraw = true; - - @Override - protected void onDraw(Canvas canvas) { - super.onDraw(canvas); - - if (isInEditMode() || mTabCount <= 0) { - return; - } - - int height = getHeight(); - int paddingLeft = getPaddingLeft(); - - if (mIndicatorHeight < 0) { - mIndicatorHeight = height - mIndicatorMarginTop - mIndicatorMarginBottom; - } - - if (mIndicatorCornerRadius < 0 || mIndicatorCornerRadius > mIndicatorHeight / 2) { - mIndicatorCornerRadius = mIndicatorHeight / 2; - } - - //draw rect - mRectDrawable.setColor(mBarColor); - mRectDrawable.setStroke((int) mBarStrokeWidth, mBarStrokeColor); - mRectDrawable.setCornerRadius(mIndicatorCornerRadius); - mRectDrawable.setBounds(getPaddingLeft(), getPaddingTop(), getWidth() - getPaddingRight(), getHeight() - getPaddingBottom()); - mRectDrawable.draw(canvas); - - // draw divider - if (!mIndicatorAnimEnable && mDividerWidth > 0) { - mDividerPaint.setStrokeWidth(mDividerWidth); - mDividerPaint.setColor(mDividerColor); - for (int i = 0; i < mTabCount - 1; i++) { - View tab = mTabsContainer.getChildAt(i); - canvas.drawLine(paddingLeft + tab.getRight(), mDividerPadding, paddingLeft + tab.getRight(), height - mDividerPadding, mDividerPaint); - } - } - - - //draw indicator line - if (mIndicatorAnimEnable) { - if (mIsFirstDraw) { - mIsFirstDraw = false; - calcIndicatorRect(); - } - } else { - calcIndicatorRect(); - } - - mIndicatorDrawable.setColor(mIndicatorColor); - mIndicatorDrawable.setBounds(paddingLeft + (int) mIndicatorMarginLeft + mIndicatorRect.left, - (int) mIndicatorMarginTop, (int) (paddingLeft + mIndicatorRect.right - mIndicatorMarginRight), - (int) (mIndicatorMarginTop + mIndicatorHeight)); - mIndicatorDrawable.setCornerRadii(mRadiusArr); - mIndicatorDrawable.draw(canvas); - - } - - //setter and getter - public void setCurrentTab(int currentTab) { - mLastTab = this.mCurrentTab; - this.mCurrentTab = currentTab; - updateTabSelection(currentTab); - if (mFragmentChangeManager != null) { - mFragmentChangeManager.setFragments(currentTab); - } - if (mIndicatorAnimEnable) { - calcOffset(); - } else { - invalidate(); - } - } - - public void setTabPadding(float tabPadding) { - this.mTabPadding = DisplayUtil.dp2px(mContext, tabPadding); - updateTabStyles(); - } - - public void setTabSpaceEqual(boolean tabSpaceEqual) { - this.mTabSpaceEqual = tabSpaceEqual; - updateTabStyles(); - } - - public void setTabWidth(float tabWidth) { - this.mTabWidth = DisplayUtil.dp2px(mContext, tabWidth); - updateTabStyles(); - } - - public void setIndicatorColor(int indicatorColor) { - this.mIndicatorColor = indicatorColor; - invalidate(); - } - - public void setIndicatorHeight(float indicatorHeight) { - this.mIndicatorHeight = DisplayUtil.dp2px(mContext, indicatorHeight); - invalidate(); - } - - public void setIndicatorCornerRadius(float indicatorCornerRadius) { - this.mIndicatorCornerRadius = DisplayUtil.dp2px(mContext, indicatorCornerRadius); - invalidate(); - } - - public void setIndicatorMargin(float indicatorMarginLeft, float indicatorMarginTop, - float indicatorMarginRight, float indicatorMarginBottom) { - this.mIndicatorMarginLeft = DisplayUtil.dp2px(mContext, indicatorMarginLeft); - this.mIndicatorMarginTop = DisplayUtil.dp2px(mContext, indicatorMarginTop); - this.mIndicatorMarginRight = DisplayUtil.dp2px(mContext, indicatorMarginRight); - this.mIndicatorMarginBottom = DisplayUtil.dp2px(mContext, indicatorMarginBottom); - invalidate(); - } - - public void setIndicatorAnimDuration(long indicatorAnimDuration) { - this.mIndicatorAnimDuration = indicatorAnimDuration; - } - - public void setIndicatorAnimEnable(boolean indicatorAnimEnable) { - this.mIndicatorAnimEnable = indicatorAnimEnable; - } - - public void setIndicatorBounceEnable(boolean indicatorBounceEnable) { - this.mIndicatorBounceEnable = indicatorBounceEnable; - } - - public void setDividerColor(int dividerColor) { - this.mDividerColor = dividerColor; - invalidate(); - } - - public void setDividerWidth(float dividerWidth) { - this.mDividerWidth = DisplayUtil.dp2px(mContext, dividerWidth); - invalidate(); - } - - public void setDividerPadding(float dividerPadding) { - this.mDividerPadding = DisplayUtil.dp2px(mContext, dividerPadding); - invalidate(); - } - - public void setTextsize(float textsize) { - this.mTextsize = DisplayUtil.sp2px(mContext, textsize); - updateTabStyles(); - } - - public void setTextSelectColor(int textSelectColor) { - this.mTextSelectColor = textSelectColor; - updateTabStyles(); - } - - public void setTextUnselectColor(int textUnselectColor) { - this.mTextUnselectColor = textUnselectColor; - updateTabStyles(); - } - - public void setTextBold(int textBold) { - this.mTextBold = textBold; - updateTabStyles(); - } - - public void setTextAllCaps(boolean textAllCaps) { - this.mTextAllCaps = textAllCaps; - updateTabStyles(); - } - - public int getTabCount() { - return mTabCount; - } - - public int getCurrentTab() { - return mCurrentTab; - } - - public float getTabPadding() { - return mTabPadding; - } - - public boolean isTabSpaceEqual() { - return mTabSpaceEqual; - } - - public float getTabWidth() { - return mTabWidth; - } - - public int getIndicatorColor() { - return mIndicatorColor; - } - - public float getIndicatorHeight() { - return mIndicatorHeight; - } - - public float getIndicatorCornerRadius() { - return mIndicatorCornerRadius; - } - - public float getIndicatorMarginLeft() { - return mIndicatorMarginLeft; - } - - public float getIndicatorMarginTop() { - return mIndicatorMarginTop; - } - - public float getIndicatorMarginRight() { - return mIndicatorMarginRight; - } - - public float getIndicatorMarginBottom() { - return mIndicatorMarginBottom; - } - - public long getIndicatorAnimDuration() { - return mIndicatorAnimDuration; - } - - public boolean isIndicatorAnimEnable() { - return mIndicatorAnimEnable; - } - - public boolean isIndicatorBounceEnable() { - return mIndicatorBounceEnable; - } - - public int getDividerColor() { - return mDividerColor; - } - - public float getDividerWidth() { - return mDividerWidth; - } - - public float getDividerPadding() { - return mDividerPadding; - } - - public float getTextsize() { - return mTextsize; - } - - public int getTextSelectColor() { - return mTextSelectColor; - } - - public int getTextUnselectColor() { - return mTextUnselectColor; - } - - public int getTextBold() { - return mTextBold; - } - - public boolean isTextAllCaps() { - return mTextAllCaps; - } - - public TextView getTitleView(int tab) { - View tabView = mTabsContainer.getChildAt(tab); - TextView tv_tab_title = (TextView) tabView.findViewById(R.id.tv_tab_title); - return tv_tab_title; - } - - //setter and getter - // show MsgTipView - private Paint mTextPaint = new Paint(Paint.ANTI_ALIAS_FLAG); - private SparseArray mInitSetMap = new SparseArray<>(); - - - public void showMsg(int position, int num) { - if (position >= mTabCount) { - position = mTabCount - 1; - } - - View tabView = mTabsContainer.getChildAt(position); - MsgView tipView = (MsgView) tabView.findViewById(R.id.rtv_msg_tip); - if (tipView != null) { - UnreadMsgUtils.show(tipView, num); - - if (mInitSetMap.get(position) != null && mInitSetMap.get(position)) { - return; - } - - setMsgMargin(position, 2, 2); - - mInitSetMap.put(position, true); - } - } - - public void showDot(int position) { - if (position >= mTabCount) { - position = mTabCount - 1; - } - showMsg(position, 0); - } - - public void hideMsg(int position) { - if (position >= mTabCount) { - position = mTabCount - 1; - } - - View tabView = mTabsContainer.getChildAt(position); - MsgView tipView = (MsgView) tabView.findViewById(R.id.rtv_msg_tip); - if (tipView != null) { - tipView.setVisibility(View.GONE); - } - } - - public void setMsgMargin(int position, float leftPadding, float bottomPadding) { - if (position >= mTabCount) { - position = mTabCount - 1; - } - View tabView = mTabsContainer.getChildAt(position); - MsgView tipView = (MsgView) tabView.findViewById(R.id.rtv_msg_tip); - if (tipView != null) { - TextView tv_tab_title = (TextView) tabView.findViewById(R.id.tv_tab_title); - mTextPaint.setTextSize(mTextsize); - float textWidth = mTextPaint.measureText(tv_tab_title.getText().toString()); - float textHeight = mTextPaint.descent() - mTextPaint.ascent(); - MarginLayoutParams lp = (MarginLayoutParams) tipView.getLayoutParams(); - - lp.leftMargin = DisplayUtil.dp2px(mContext, leftPadding); - lp.topMargin = mHeight > 0 ? (int) (mHeight - textHeight) / 2 - DisplayUtil.dp2px(mContext, bottomPadding) : DisplayUtil.dp2px(mContext, bottomPadding); - - tipView.setLayoutParams(lp); - } - } - - public MsgView getMsgView(int position) { - if (position >= mTabCount) { - position = mTabCount - 1; - } - View tabView = mTabsContainer.getChildAt(position); - MsgView tipView = (MsgView) tabView.findViewById(R.id.rtv_msg_tip); - return tipView; - } - - private OnTabSelectListener mListener; - - public void setOnTabSelectListener(OnTabSelectListener listener) { - this.mListener = listener; - } - - @Override - protected Parcelable onSaveInstanceState() { - Bundle bundle = new Bundle(); - bundle.putParcelable("instanceState", super.onSaveInstanceState()); - bundle.putInt("mCurrentTab", mCurrentTab); - return bundle; - } - - @Override - protected void onRestoreInstanceState(Parcelable state) { - if (state instanceof Bundle) { - Bundle bundle = (Bundle) state; - mCurrentTab = bundle.getInt("mCurrentTab"); - state = bundle.getParcelable("instanceState"); - if (mCurrentTab != 0 && mTabsContainer.getChildCount() > 0) { - updateTabSelection(mCurrentTab); - } - } - super.onRestoreInstanceState(state); - } - - class IndicatorPoint { - public float left; - public float right; - } - - private IndicatorPoint mCurrentP = new IndicatorPoint(); - private IndicatorPoint mLastP = new IndicatorPoint(); - - class PointEvaluator implements TypeEvaluator { - @Override - public IndicatorPoint evaluate(float fraction, IndicatorPoint startValue, IndicatorPoint endValue) { - float left = startValue.left + fraction * (endValue.left - startValue.left); - float right = startValue.right + fraction * (endValue.right - startValue.right); - IndicatorPoint point = new IndicatorPoint(); - point.left = left; - point.right = right; - return point; - } - } - -} diff --git a/model_zoo/official/lite/MindSpore_inhand/customView/src/main/java/com/mindspore/customview/tablayout/SlidingTabLayout.java b/model_zoo/official/lite/MindSpore_inhand/customView/src/main/java/com/mindspore/customview/tablayout/SlidingTabLayout.java deleted file mode 100644 index e1c5e27ec7e..00000000000 --- a/model_zoo/official/lite/MindSpore_inhand/customView/src/main/java/com/mindspore/customview/tablayout/SlidingTabLayout.java +++ /dev/null @@ -1,907 +0,0 @@ -/** - * Copyright 2021 Huawei Technologies Co., Ltd - *

- * 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.mindspore.customview.tablayout; - -import android.content.Context; -import android.content.res.TypedArray; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.graphics.Path; -import android.graphics.Rect; -import android.graphics.drawable.GradientDrawable; -import android.os.Bundle; -import android.os.Parcelable; -import android.util.AttributeSet; -import android.util.SparseArray; -import android.util.TypedValue; -import android.view.Gravity; -import android.view.View; -import android.view.ViewGroup; -import android.widget.HorizontalScrollView; -import android.widget.LinearLayout; -import android.widget.TextView; - -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentActivity; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentPagerAdapter; -import androidx.viewpager.widget.PagerAdapter; -import androidx.viewpager.widget.ViewPager; - -import com.mindspore.common.utils.DisplayUtil; -import com.mindspore.customview.R; -import com.mindspore.customview.tablayout.listener.OnTabSelectListener; -import com.mindspore.customview.tablayout.utils.UnreadMsgUtils; -import com.mindspore.customview.tablayout.widget.MsgView; - -import java.util.ArrayList; -import java.util.Collections; - - -public class SlidingTabLayout extends HorizontalScrollView implements ViewPager.OnPageChangeListener { - private Context mContext; - private ViewPager mViewPager; - private ArrayList mTitles; - private LinearLayout mTabsContainer; - private int mCurrentTab; - private float mCurrentPositionOffset; - private int mTabCount; - - private Rect mIndicatorRect = new Rect(); - - private Rect mTabRect = new Rect(); - private GradientDrawable mIndicatorDrawable = new GradientDrawable(); - - private Paint mRectPaint = new Paint(Paint.ANTI_ALIAS_FLAG); - private Paint mDividerPaint = new Paint(Paint.ANTI_ALIAS_FLAG); - private Paint mTrianglePaint = new Paint(Paint.ANTI_ALIAS_FLAG); - private Path mTrianglePath = new Path(); - private static final int STYLE_NORMAL = 0; - private static final int STYLE_TRIANGLE = 1; - private static final int STYLE_BLOCK = 2; - private int mIndicatorStyle = STYLE_NORMAL; - - private float mTabPadding; - private boolean mTabSpaceEqual; - private float mTabWidth; - - /** - * indicator - */ - private int mIndicatorColor; - private float mIndicatorHeight; - private float mIndicatorWidth; - private float mIndicatorCornerRadius; - private float mIndicatorMarginLeft; - private float mIndicatorMarginTop; - private float mIndicatorMarginRight; - private float mIndicatorMarginBottom; - private int mIndicatorGravity; - private boolean mIndicatorWidthEqualTitle; - - /** - * underline - */ - private int mUnderlineColor; - private float mUnderlineHeight; - private int mUnderlineGravity; - - /** - * divider - */ - private int mDividerColor; - private float mDividerWidth; - private float mDividerPadding; - - /** - * title - */ - private static final int TEXT_BOLD_NONE = 0; - private static final int TEXT_BOLD_WHEN_SELECT = 1; - private static final int TEXT_BOLD_BOTH = 2; - private float mTextsize; - private int mTextSelectColor; - private int mTextUnselectColor; - private int mTextBold; - private boolean mTextAllCaps; - - private int mLastScrollX; - private int mHeight; - private boolean mSnapOnTabClick; - - public SlidingTabLayout(Context context) { - this(context, null, 0); - } - - public SlidingTabLayout(Context context, AttributeSet attrs) { - this(context, attrs, 0); - } - - public SlidingTabLayout(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - setFillViewport(true); - setWillNotDraw(false); - setClipChildren(false); - setClipToPadding(false); - - this.mContext = context; - mTabsContainer = new LinearLayout(context); - addView(mTabsContainer); - - obtainAttributes(context, attrs); - - //get layout_height - String height = attrs.getAttributeValue("http://schemas.android.com/apk/res/android", "layout_height"); - - if (height.equals(ViewGroup.LayoutParams.MATCH_PARENT + "")) { - } else if (height.equals(ViewGroup.LayoutParams.WRAP_CONTENT + "")) { - } else { - int[] systemAttrs = {android.R.attr.layout_height}; - TypedArray a = context.obtainStyledAttributes(attrs, systemAttrs); - mHeight = a.getDimensionPixelSize(0, ViewGroup.LayoutParams.WRAP_CONTENT); - a.recycle(); - } - } - - private void obtainAttributes(Context context, AttributeSet attrs) { - TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.SlidingTabLayout); - - mIndicatorStyle = ta.getInt(R.styleable.SlidingTabLayout_tl_indicator_style, STYLE_NORMAL); - mIndicatorColor = ta.getColor(R.styleable.SlidingTabLayout_tl_indicator_color, Color.parseColor(mIndicatorStyle == STYLE_BLOCK ? "#4B6A87" : "#ffffff")); - mIndicatorHeight = ta.getDimension(R.styleable.SlidingTabLayout_tl_indicator_height, - DisplayUtil.dp2px(context, mIndicatorStyle == STYLE_TRIANGLE ? 4 : (mIndicatorStyle == STYLE_BLOCK ? -1 : 2))); - mIndicatorWidth = ta.getDimension(R.styleable.SlidingTabLayout_tl_indicator_width, DisplayUtil.dp2px(context, mIndicatorStyle == STYLE_TRIANGLE ? 10 : -1)); - mIndicatorCornerRadius = ta.getDimension(R.styleable.SlidingTabLayout_tl_indicator_corner_radius, DisplayUtil.dp2px(context, mIndicatorStyle == STYLE_BLOCK ? -1 : 0)); - mIndicatorMarginLeft = ta.getDimension(R.styleable.SlidingTabLayout_tl_indicator_margin_left, DisplayUtil.dp2px(context, 0)); - mIndicatorMarginTop = ta.getDimension(R.styleable.SlidingTabLayout_tl_indicator_margin_top, DisplayUtil.dp2px(context, mIndicatorStyle == STYLE_BLOCK ? 7 : 0)); - mIndicatorMarginRight = ta.getDimension(R.styleable.SlidingTabLayout_tl_indicator_margin_right, DisplayUtil.dp2px(context, 0)); - mIndicatorMarginBottom = ta.getDimension(R.styleable.SlidingTabLayout_tl_indicator_margin_bottom, DisplayUtil.dp2px(context, mIndicatorStyle == STYLE_BLOCK ? 7 : 0)); - mIndicatorGravity = ta.getInt(R.styleable.SlidingTabLayout_tl_indicator_gravity, Gravity.BOTTOM); - mIndicatorWidthEqualTitle = ta.getBoolean(R.styleable.SlidingTabLayout_tl_indicator_width_equal_title, false); - - mUnderlineColor = ta.getColor(R.styleable.SlidingTabLayout_tl_underline_color, Color.parseColor("#ffffff")); - mUnderlineHeight = ta.getDimension(R.styleable.SlidingTabLayout_tl_underline_height, DisplayUtil.dp2px(context, 0)); - mUnderlineGravity = ta.getInt(R.styleable.SlidingTabLayout_tl_underline_gravity, Gravity.BOTTOM); - - mDividerColor = ta.getColor(R.styleable.SlidingTabLayout_tl_divider_color, Color.parseColor("#ffffff")); - mDividerWidth = ta.getDimension(R.styleable.SlidingTabLayout_tl_divider_width, DisplayUtil.dp2px(context, 0)); - mDividerPadding = ta.getDimension(R.styleable.SlidingTabLayout_tl_divider_padding, DisplayUtil.dp2px(context, 12)); - - mTextsize = ta.getDimension(R.styleable.SlidingTabLayout_tl_textsize, DisplayUtil.sp2px(context, 14)); - mTextSelectColor = ta.getColor(R.styleable.SlidingTabLayout_tl_textSelectColor, Color.parseColor("#ffffff")); - mTextUnselectColor = ta.getColor(R.styleable.SlidingTabLayout_tl_textUnselectColor, Color.parseColor("#AAffffff")); - mTextBold = ta.getInt(R.styleable.SlidingTabLayout_tl_textBold, TEXT_BOLD_NONE); - mTextAllCaps = ta.getBoolean(R.styleable.SlidingTabLayout_tl_textAllCaps, false); - - mTabSpaceEqual = ta.getBoolean(R.styleable.SlidingTabLayout_tl_tab_space_equal, false); - mTabWidth = ta.getDimension(R.styleable.SlidingTabLayout_tl_tab_width, DisplayUtil.dp2px(context, -1)); - mTabPadding = ta.getDimension(R.styleable.SlidingTabLayout_tl_tab_padding, mTabSpaceEqual || mTabWidth > 0 ? DisplayUtil.dp2px(context, 0) : DisplayUtil.dp2px(context, 20)); - - ta.recycle(); - } - - public void setViewPager(ViewPager vp) { - if (vp == null || vp.getAdapter() == null) { - throw new IllegalStateException("ViewPager or ViewPager adapter can not be NULL !"); - } - - this.mViewPager = vp; - - this.mViewPager.removeOnPageChangeListener(this); - this.mViewPager.addOnPageChangeListener(this); - notifyDataSetChanged(); - } - - public void setViewPager(ViewPager vp, String[] titles) { - if (vp == null || vp.getAdapter() == null) { - throw new IllegalStateException("ViewPager or ViewPager adapter can not be NULL !"); - } - - if (titles == null || titles.length == 0) { - throw new IllegalStateException("Titles can not be EMPTY !"); - } - - if (titles.length != vp.getAdapter().getCount()) { - throw new IllegalStateException("Titles length must be the same as the page count !"); - } - - this.mViewPager = vp; - mTitles = new ArrayList<>(); - Collections.addAll(mTitles, titles); - - this.mViewPager.removeOnPageChangeListener(this); - this.mViewPager.addOnPageChangeListener(this); - notifyDataSetChanged(); - } - - public void setViewPager(ViewPager vp, String[] titles, FragmentActivity fa, ArrayList fragments) { - if (vp == null) { - throw new IllegalStateException("ViewPager can not be NULL !"); - } - - if (titles == null || titles.length == 0) { - throw new IllegalStateException("Titles can not be EMPTY !"); - } - - this.mViewPager = vp; - this.mViewPager.setAdapter(new InnerPagerAdapter(fa.getSupportFragmentManager(), fragments, titles)); - - this.mViewPager.removeOnPageChangeListener(this); - this.mViewPager.addOnPageChangeListener(this); - notifyDataSetChanged(); - } - - public void notifyDataSetChanged() { - mTabsContainer.removeAllViews(); - this.mTabCount = mTitles == null ? mViewPager.getAdapter().getCount() : mTitles.size(); - View tabView; - for (int i = 0; i < mTabCount; i++) { - tabView = View.inflate(mContext, R.layout.layout_tab, null); - CharSequence pageTitle = mTitles == null ? mViewPager.getAdapter().getPageTitle(i) : mTitles.get(i); - addTab(i, pageTitle.toString(), tabView); - } - - updateTabStyles(); - } - - public void addNewTab(String title) { - View tabView = View.inflate(mContext, R.layout.layout_tab, null); - if (mTitles != null) { - mTitles.add(title); - } - - CharSequence pageTitle = mTitles == null ? mViewPager.getAdapter().getPageTitle(mTabCount) : mTitles.get(mTabCount); - addTab(mTabCount, pageTitle.toString(), tabView); - this.mTabCount = mTitles == null ? mViewPager.getAdapter().getCount() : mTitles.size(); - - updateTabStyles(); - } - - private void addTab(final int position, String title, View tabView) { - TextView tv_tab_title = (TextView) tabView.findViewById(R.id.tv_tab_title); - if (tv_tab_title != null) { - if (title != null) tv_tab_title.setText(title); - } - - tabView.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - int position = mTabsContainer.indexOfChild(v); - if (position != -1) { - if (mViewPager.getCurrentItem() != position) { - if (mSnapOnTabClick) { - mViewPager.setCurrentItem(position, false); - } else { - mViewPager.setCurrentItem(position); - } - - if (mListener != null) { - mListener.onTabSelect(position); - } - } else { - if (mListener != null) { - mListener.onTabReselect(position); - } - } - } - } - }); - - LinearLayout.LayoutParams lp_tab = mTabSpaceEqual ? - new LinearLayout.LayoutParams(0, LayoutParams.MATCH_PARENT, 1.0f) : - new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT); - if (mTabWidth > 0) { - lp_tab = new LinearLayout.LayoutParams((int) mTabWidth, LayoutParams.MATCH_PARENT); - } - - mTabsContainer.addView(tabView, position, lp_tab); - } - - private void updateTabStyles() { - for (int i = 0; i < mTabCount; i++) { - View v = mTabsContainer.getChildAt(i); -// v.setPadding((int) mTabPadding, v.getPaddingTop(), (int) mTabPadding, v.getPaddingBottom()); - TextView tv_tab_title = (TextView) v.findViewById(R.id.tv_tab_title); - if (tv_tab_title != null) { - tv_tab_title.setTextColor(i == mCurrentTab ? mTextSelectColor : mTextUnselectColor); - tv_tab_title.setTextSize(TypedValue.COMPLEX_UNIT_PX, mTextsize); - tv_tab_title.setPadding((int) mTabPadding, 0, (int) mTabPadding, 0); - if (mTextAllCaps) { - tv_tab_title.setText(tv_tab_title.getText().toString().toUpperCase()); - } - - if (mTextBold == TEXT_BOLD_BOTH) { - tv_tab_title.getPaint().setFakeBoldText(true); - } else if (mTextBold == TEXT_BOLD_NONE) { - tv_tab_title.getPaint().setFakeBoldText(false); - } - } - } - } - - @Override - public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { - this.mCurrentTab = position; - this.mCurrentPositionOffset = positionOffset; - scrollToCurrentTab(); - invalidate(); - } - - @Override - public void onPageSelected(int position) { - updateTabSelection(position); - } - - @Override - public void onPageScrollStateChanged(int state) { - } - - /** - * HorizontalScrollView滚到当前tab,并且居中显示 - */ - private void scrollToCurrentTab() { - if (mTabCount <= 0) { - return; - } - - int offset = (int) (mCurrentPositionOffset * mTabsContainer.getChildAt(mCurrentTab).getWidth()); - int newScrollX = mTabsContainer.getChildAt(mCurrentTab).getLeft() + offset; - - if (mCurrentTab > 0 || offset > 0) { - /**HorizontalScrollView移动到当前tab,并居中*/ - newScrollX -= getWidth() / 2 - getPaddingLeft(); - calcIndicatorRect(); - newScrollX += ((mTabRect.right - mTabRect.left) / 2); - } - - if (newScrollX != mLastScrollX) { - mLastScrollX = newScrollX; - scrollTo(newScrollX, 0); - } - } - - private void updateTabSelection(int position) { - for (int i = 0; i < mTabCount; ++i) { - View tabView = mTabsContainer.getChildAt(i); - final boolean isSelect = i == position; - TextView tab_title = (TextView) tabView.findViewById(R.id.tv_tab_title); - - if (tab_title != null) { - tab_title.setTextColor(isSelect ? mTextSelectColor : mTextUnselectColor); - if (mTextBold == TEXT_BOLD_WHEN_SELECT) { - tab_title.getPaint().setFakeBoldText(isSelect); - } - } - } - } - - private float margin; - - private void calcIndicatorRect() { - View currentTabView = mTabsContainer.getChildAt(this.mCurrentTab); - float left = currentTabView.getLeft(); - float right = currentTabView.getRight(); - - //for mIndicatorWidthEqualTitle - if (mIndicatorStyle == STYLE_NORMAL && mIndicatorWidthEqualTitle) { - TextView tab_title = (TextView) currentTabView.findViewById(R.id.tv_tab_title); - mTextPaint.setTextSize(mTextsize); - float textWidth = mTextPaint.measureText(tab_title.getText().toString()); - margin = (right - left - textWidth) / 2; - } - - if (this.mCurrentTab < mTabCount - 1) { - View nextTabView = mTabsContainer.getChildAt(this.mCurrentTab + 1); - float nextTabLeft = nextTabView.getLeft(); - float nextTabRight = nextTabView.getRight(); - - left = left + mCurrentPositionOffset * (nextTabLeft - left); - right = right + mCurrentPositionOffset * (nextTabRight - right); - - //for mIndicatorWidthEqualTitle - if (mIndicatorStyle == STYLE_NORMAL && mIndicatorWidthEqualTitle) { - TextView next_tab_title = (TextView) nextTabView.findViewById(R.id.tv_tab_title); - mTextPaint.setTextSize(mTextsize); - float nextTextWidth = mTextPaint.measureText(next_tab_title.getText().toString()); - float nextMargin = (nextTabRight - nextTabLeft - nextTextWidth) / 2; - margin = margin + mCurrentPositionOffset * (nextMargin - margin); - } - } - - mIndicatorRect.left = (int) left; - mIndicatorRect.right = (int) right; - //for mIndicatorWidthEqualTitle - if (mIndicatorStyle == STYLE_NORMAL && mIndicatorWidthEqualTitle) { - mIndicatorRect.left = (int) (left + margin - 1); - mIndicatorRect.right = (int) (right - margin - 1); - } - - mTabRect.left = (int) left; - mTabRect.right = (int) right; - - if (mIndicatorWidth < 0) { - - } else { - float indicatorLeft = currentTabView.getLeft() + (currentTabView.getWidth() - mIndicatorWidth) / 2; - - if (this.mCurrentTab < mTabCount - 1) { - View nextTab = mTabsContainer.getChildAt(this.mCurrentTab + 1); - indicatorLeft = indicatorLeft + mCurrentPositionOffset * (currentTabView.getWidth() / 2 + nextTab.getWidth() / 2); - } - - mIndicatorRect.left = (int) indicatorLeft; - mIndicatorRect.right = (int) (mIndicatorRect.left + mIndicatorWidth); - } - } - - @Override - protected void onDraw(Canvas canvas) { - super.onDraw(canvas); - - if (isInEditMode() || mTabCount <= 0) { - return; - } - - int height = getHeight(); - int paddingLeft = getPaddingLeft(); - // draw divider - if (mDividerWidth > 0) { - mDividerPaint.setStrokeWidth(mDividerWidth); - mDividerPaint.setColor(mDividerColor); - for (int i = 0; i < mTabCount - 1; i++) { - View tab = mTabsContainer.getChildAt(i); - canvas.drawLine(paddingLeft + tab.getRight(), mDividerPadding, paddingLeft + tab.getRight(), height - mDividerPadding, mDividerPaint); - } - } - - // draw underline - if (mUnderlineHeight > 0) { - mRectPaint.setColor(mUnderlineColor); - if (mUnderlineGravity == Gravity.BOTTOM) { - canvas.drawRect(paddingLeft, height - mUnderlineHeight, mTabsContainer.getWidth() + paddingLeft, height, mRectPaint); - } else { - canvas.drawRect(paddingLeft, 0, mTabsContainer.getWidth() + paddingLeft, mUnderlineHeight, mRectPaint); - } - } - - //draw indicator line - - calcIndicatorRect(); - if (mIndicatorStyle == STYLE_TRIANGLE) { - if (mIndicatorHeight > 0) { - mTrianglePaint.setColor(mIndicatorColor); - mTrianglePath.reset(); - mTrianglePath.moveTo(paddingLeft + mIndicatorRect.left, height); - mTrianglePath.lineTo(paddingLeft + mIndicatorRect.left / 2 + mIndicatorRect.right / 2, height - mIndicatorHeight); - mTrianglePath.lineTo(paddingLeft + mIndicatorRect.right, height); - mTrianglePath.close(); - canvas.drawPath(mTrianglePath, mTrianglePaint); - } - } else if (mIndicatorStyle == STYLE_BLOCK) { - if (mIndicatorHeight < 0) { - mIndicatorHeight = height - mIndicatorMarginTop - mIndicatorMarginBottom; - } else { - - } - - if (mIndicatorHeight > 0) { - if (mIndicatorCornerRadius < 0 || mIndicatorCornerRadius > mIndicatorHeight / 2) { - mIndicatorCornerRadius = mIndicatorHeight / 2; - } - - mIndicatorDrawable.setColor(mIndicatorColor); - mIndicatorDrawable.setBounds(paddingLeft + (int) mIndicatorMarginLeft + mIndicatorRect.left, - (int) mIndicatorMarginTop, (int) (paddingLeft + mIndicatorRect.right - mIndicatorMarginRight), - (int) (mIndicatorMarginTop + mIndicatorHeight)); - mIndicatorDrawable.setCornerRadius(mIndicatorCornerRadius); - mIndicatorDrawable.draw(canvas); - } - } else { - /* mRectPaint.setColor(mIndicatorColor); - calcIndicatorRect(); - canvas.drawRect(getPaddingLeft() + mIndicatorRect.left, getHeight() - mIndicatorHeight, - mIndicatorRect.right + getPaddingLeft(), getHeight(), mRectPaint);*/ - - if (mIndicatorHeight > 0) { - mIndicatorDrawable.setColor(mIndicatorColor); - - if (mIndicatorGravity == Gravity.BOTTOM) { - mIndicatorDrawable.setBounds(paddingLeft + (int) mIndicatorMarginLeft + mIndicatorRect.left, - height - (int) mIndicatorHeight - (int) mIndicatorMarginBottom, - paddingLeft + mIndicatorRect.right - (int) mIndicatorMarginRight, - height - (int) mIndicatorMarginBottom); - } else { - mIndicatorDrawable.setBounds(paddingLeft + (int) mIndicatorMarginLeft + mIndicatorRect.left, - (int) mIndicatorMarginTop, - paddingLeft + mIndicatorRect.right - (int) mIndicatorMarginRight, - (int) mIndicatorHeight + (int) mIndicatorMarginTop); - } - mIndicatorDrawable.setCornerRadius(mIndicatorCornerRadius); - mIndicatorDrawable.draw(canvas); - } - } - } - - //setter and getter - public void setCurrentTab(int currentTab) { - this.mCurrentTab = currentTab; - mViewPager.setCurrentItem(currentTab); - - } - - public void setCurrentTab(int currentTab, boolean smoothScroll) { - this.mCurrentTab = currentTab; - mViewPager.setCurrentItem(currentTab, smoothScroll); - } - - public void setIndicatorStyle(int indicatorStyle) { - this.mIndicatorStyle = indicatorStyle; - invalidate(); - } - - public void setTabPadding(float tabPadding) { - this.mTabPadding = DisplayUtil.dp2px(mContext, tabPadding); - updateTabStyles(); - } - - public void setTabSpaceEqual(boolean tabSpaceEqual) { - this.mTabSpaceEqual = tabSpaceEqual; - updateTabStyles(); - } - - public void setTabWidth(float tabWidth) { - this.mTabWidth = DisplayUtil.dp2px(mContext, tabWidth); - updateTabStyles(); - } - - public void setIndicatorColor(int indicatorColor) { - this.mIndicatorColor = indicatorColor; - invalidate(); - } - - public void setIndicatorHeight(float indicatorHeight) { - this.mIndicatorHeight = DisplayUtil.dp2px(mContext, indicatorHeight); - invalidate(); - } - - public void setIndicatorWidth(float indicatorWidth) { - this.mIndicatorWidth = DisplayUtil.dp2px(mContext, indicatorWidth); - invalidate(); - } - - public void setIndicatorCornerRadius(float indicatorCornerRadius) { - this.mIndicatorCornerRadius = DisplayUtil.dp2px(mContext, indicatorCornerRadius); - invalidate(); - } - - public void setIndicatorGravity(int indicatorGravity) { - this.mIndicatorGravity = indicatorGravity; - invalidate(); - } - - public void setIndicatorMargin(float indicatorMarginLeft, float indicatorMarginTop, - float indicatorMarginRight, float indicatorMarginBottom) { - this.mIndicatorMarginLeft = DisplayUtil.dp2px(mContext, indicatorMarginLeft); - this.mIndicatorMarginTop = DisplayUtil.dp2px(mContext, indicatorMarginTop); - this.mIndicatorMarginRight = DisplayUtil.dp2px(mContext, indicatorMarginRight); - this.mIndicatorMarginBottom = DisplayUtil.dp2px(mContext, indicatorMarginBottom); - invalidate(); - } - - public void setIndicatorWidthEqualTitle(boolean indicatorWidthEqualTitle) { - this.mIndicatorWidthEqualTitle = indicatorWidthEqualTitle; - invalidate(); - } - - public void setUnderlineColor(int underlineColor) { - this.mUnderlineColor = underlineColor; - invalidate(); - } - - public void setUnderlineHeight(float underlineHeight) { - this.mUnderlineHeight = DisplayUtil.dp2px(mContext, underlineHeight); - invalidate(); - } - - public void setUnderlineGravity(int underlineGravity) { - this.mUnderlineGravity = underlineGravity; - invalidate(); - } - - public void setDividerColor(int dividerColor) { - this.mDividerColor = dividerColor; - invalidate(); - } - - public void setDividerWidth(float dividerWidth) { - this.mDividerWidth = DisplayUtil.dp2px(mContext, dividerWidth); - invalidate(); - } - - public void setDividerPadding(float dividerPadding) { - this.mDividerPadding = DisplayUtil.dp2px(mContext, dividerPadding); - invalidate(); - } - - public void setTextsize(float textsize) { - this.mTextsize = DisplayUtil.sp2px(mContext, textsize); - updateTabStyles(); - } - - public void setTextSelectColor(int textSelectColor) { - this.mTextSelectColor = textSelectColor; - updateTabStyles(); - } - - public void setTextUnselectColor(int textUnselectColor) { - this.mTextUnselectColor = textUnselectColor; - updateTabStyles(); - } - - public void setTextBold(int textBold) { - this.mTextBold = textBold; - updateTabStyles(); - } - - public void setTextAllCaps(boolean textAllCaps) { - this.mTextAllCaps = textAllCaps; - updateTabStyles(); - } - - public void setSnapOnTabClick(boolean snapOnTabClick) { - mSnapOnTabClick = snapOnTabClick; - } - - - public int getTabCount() { - return mTabCount; - } - - public int getCurrentTab() { - return mCurrentTab; - } - - public int getIndicatorStyle() { - return mIndicatorStyle; - } - - public float getTabPadding() { - return mTabPadding; - } - - public boolean isTabSpaceEqual() { - return mTabSpaceEqual; - } - - public float getTabWidth() { - return mTabWidth; - } - - public int getIndicatorColor() { - return mIndicatorColor; - } - - public float getIndicatorHeight() { - return mIndicatorHeight; - } - - public float getIndicatorWidth() { - return mIndicatorWidth; - } - - public float getIndicatorCornerRadius() { - return mIndicatorCornerRadius; - } - - public float getIndicatorMarginLeft() { - return mIndicatorMarginLeft; - } - - public float getIndicatorMarginTop() { - return mIndicatorMarginTop; - } - - public float getIndicatorMarginRight() { - return mIndicatorMarginRight; - } - - public float getIndicatorMarginBottom() { - return mIndicatorMarginBottom; - } - - public int getUnderlineColor() { - return mUnderlineColor; - } - - public float getUnderlineHeight() { - return mUnderlineHeight; - } - - public int getDividerColor() { - return mDividerColor; - } - - public float getDividerWidth() { - return mDividerWidth; - } - - public float getDividerPadding() { - return mDividerPadding; - } - - public float getTextsize() { - return mTextsize; - } - - public int getTextSelectColor() { - return mTextSelectColor; - } - - public int getTextUnselectColor() { - return mTextUnselectColor; - } - - public int getTextBold() { - return mTextBold; - } - - public boolean isTextAllCaps() { - return mTextAllCaps; - } - - public TextView getTitleView(int tab) { - View tabView = mTabsContainer.getChildAt(tab); - TextView tv_tab_title = (TextView) tabView.findViewById(R.id.tv_tab_title); - return tv_tab_title; - } - - //setter and getter - - // show MsgTipView - private Paint mTextPaint = new Paint(Paint.ANTI_ALIAS_FLAG); - private SparseArray mInitSetMap = new SparseArray<>(); - - public void showMsg(int position, int num) { - if (position >= mTabCount) { - position = mTabCount - 1; - } - - View tabView = mTabsContainer.getChildAt(position); - MsgView tipView = (MsgView) tabView.findViewById(R.id.rtv_msg_tip); - if (tipView != null) { - UnreadMsgUtils.show(tipView, num); - - if (mInitSetMap.get(position) != null && mInitSetMap.get(position)) { - return; - } - - setMsgMargin(position, 4, 2); - mInitSetMap.put(position, true); - } - } - - public void showDot(int position) { - if (position >= mTabCount) { - position = mTabCount - 1; - } - showMsg(position, 0); - } - - public void hideMsg(int position) { - if (position >= mTabCount) { - position = mTabCount - 1; - } - - View tabView = mTabsContainer.getChildAt(position); - MsgView tipView = (MsgView) tabView.findViewById(R.id.rtv_msg_tip); - if (tipView != null) { - tipView.setVisibility(View.GONE); - } - } - - public void setMsgMargin(int position, float leftPadding, float bottomPadding) { - if (position >= mTabCount) { - position = mTabCount - 1; - } - View tabView = mTabsContainer.getChildAt(position); - MsgView tipView = (MsgView) tabView.findViewById(R.id.rtv_msg_tip); - if (tipView != null) { - TextView tv_tab_title = (TextView) tabView.findViewById(R.id.tv_tab_title); - mTextPaint.setTextSize(mTextsize); - float textWidth = mTextPaint.measureText(tv_tab_title.getText().toString()); - float textHeight = mTextPaint.descent() - mTextPaint.ascent(); - MarginLayoutParams lp = (MarginLayoutParams) tipView.getLayoutParams(); - lp.leftMargin = mTabWidth >= 0 ? (int) (mTabWidth / 2 + textWidth / 2 + DisplayUtil.dp2px(mContext, leftPadding)) : (int) (mTabPadding + textWidth + DisplayUtil.dp2px(mContext, leftPadding)); - lp.topMargin = mHeight > 0 ? (int) (mHeight - textHeight) / 2 - DisplayUtil.dp2px(mContext, bottomPadding) : 0; - tipView.setLayoutParams(lp); - } - } - - public MsgView getMsgView(int position) { - if (position >= mTabCount) { - position = mTabCount - 1; - } - View tabView = mTabsContainer.getChildAt(position); - MsgView tipView = (MsgView) tabView.findViewById(R.id.rtv_msg_tip); - return tipView; - } - - private OnTabSelectListener mListener; - - public void setOnTabSelectListener(OnTabSelectListener listener) { - this.mListener = listener; - } - - class InnerPagerAdapter extends FragmentPagerAdapter { - private ArrayList fragments = new ArrayList<>(); - private String[] titles; - - public InnerPagerAdapter(FragmentManager fm, ArrayList fragments, String[] titles) { - super(fm); - this.fragments = fragments; - this.titles = titles; - } - - @Override - public int getCount() { - return fragments.size(); - } - - @Override - public CharSequence getPageTitle(int position) { - return titles[position]; - } - - @Override - public Fragment getItem(int position) { - return fragments.get(position); - } - - @Override - public void destroyItem(ViewGroup container, int position, Object object) { - // 覆写destroyItem并且空实现,这样每个Fragment中的视图就不会被销毁 - // super.destroyItem(container, position, object); - } - - @Override - public int getItemPosition(Object object) { - return PagerAdapter.POSITION_NONE; - } - } - - @Override - protected Parcelable onSaveInstanceState() { - Bundle bundle = new Bundle(); - bundle.putParcelable("instanceState", super.onSaveInstanceState()); - bundle.putInt("mCurrentTab", mCurrentTab); - return bundle; - } - - @Override - protected void onRestoreInstanceState(Parcelable state) { - if (state instanceof Bundle) { - Bundle bundle = (Bundle) state; - mCurrentTab = bundle.getInt("mCurrentTab"); - state = bundle.getParcelable("instanceState"); - if (mCurrentTab != 0 && mTabsContainer.getChildCount() > 0) { - updateTabSelection(mCurrentTab); - scrollToCurrentTab(); - } - } - super.onRestoreInstanceState(state); - } -} diff --git a/model_zoo/official/lite/MindSpore_inhand/customView/src/main/java/com/mindspore/customview/tablayout/listener/OnTabSelectListener.java b/model_zoo/official/lite/MindSpore_inhand/customView/src/main/java/com/mindspore/customview/tablayout/listener/OnTabSelectListener.java deleted file mode 100644 index 5b8dd54ab1a..00000000000 --- a/model_zoo/official/lite/MindSpore_inhand/customView/src/main/java/com/mindspore/customview/tablayout/listener/OnTabSelectListener.java +++ /dev/null @@ -1,21 +0,0 @@ -/** - * Copyright 2021 Huawei Technologies Co., Ltd - *

- * 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.mindspore.customview.tablayout.listener; - -public interface OnTabSelectListener { - void onTabSelect(int position); - void onTabReselect(int position); -} diff --git a/model_zoo/official/lite/MindSpore_inhand/customView/src/main/java/com/mindspore/customview/tablayout/utils/FragmentChangeManager.java b/model_zoo/official/lite/MindSpore_inhand/customView/src/main/java/com/mindspore/customview/tablayout/utils/FragmentChangeManager.java deleted file mode 100644 index 95d6beef623..00000000000 --- a/model_zoo/official/lite/MindSpore_inhand/customView/src/main/java/com/mindspore/customview/tablayout/utils/FragmentChangeManager.java +++ /dev/null @@ -1,69 +0,0 @@ -/** - * Copyright 2021 Huawei Technologies Co., Ltd - *

- * 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.mindspore.customview.tablayout.utils; - -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentTransaction; - -import java.util.ArrayList; - -public class FragmentChangeManager { - private FragmentManager mFragmentManager; - private int mContainerViewId; - - private ArrayList mFragments; - - private int mCurrentTab; - - public FragmentChangeManager(FragmentManager fm, int containerViewId, ArrayList fragments) { - this.mFragmentManager = fm; - this.mContainerViewId = containerViewId; - this.mFragments = fragments; - initFragments(); - } - - private void initFragments() { - for (Fragment fragment : mFragments) { - mFragmentManager.beginTransaction().add(mContainerViewId, fragment).hide(fragment).commit(); - } - - setFragments(0); - } - - - public void setFragments(int index) { - for (int i = 0; i < mFragments.size(); i++) { - FragmentTransaction ft = mFragmentManager.beginTransaction(); - Fragment fragment = mFragments.get(i); - if (i == index) { - ft.show(fragment); - } else { - ft.hide(fragment); - } - ft.commit(); - } - mCurrentTab = index; - } - - public int getCurrentTab() { - return mCurrentTab; - } - - public Fragment getCurrentFragment() { - return mFragments.get(mCurrentTab); - } -} \ No newline at end of file diff --git a/model_zoo/official/lite/MindSpore_inhand/customView/src/main/java/com/mindspore/customview/tablayout/utils/UnreadMsgUtils.java b/model_zoo/official/lite/MindSpore_inhand/customView/src/main/java/com/mindspore/customview/tablayout/utils/UnreadMsgUtils.java deleted file mode 100644 index fdc602e7182..00000000000 --- a/model_zoo/official/lite/MindSpore_inhand/customView/src/main/java/com/mindspore/customview/tablayout/utils/UnreadMsgUtils.java +++ /dev/null @@ -1,66 +0,0 @@ -/** - * Copyright 2021 Huawei Technologies Co., Ltd - *

- * 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.mindspore.customview.tablayout.utils; - -import android.util.DisplayMetrics; -import android.view.View; -import android.widget.RelativeLayout; - -import com.mindspore.customview.tablayout.widget.MsgView; - -public class UnreadMsgUtils { - public static void show(MsgView msgView, int num) { - if (msgView == null) { - return; - } - RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) msgView.getLayoutParams(); - DisplayMetrics dm = msgView.getResources().getDisplayMetrics(); - msgView.setVisibility(View.VISIBLE); - if (num <= 0) {//圆点,设置默认宽高 - msgView.setStrokeWidth(0); - msgView.setText(""); - - lp.width = (int) (5 * dm.density); - lp.height = (int) (5 * dm.density); - msgView.setLayoutParams(lp); - } else { - lp.height = (int) (18 * dm.density); - if (num > 0 && num < 10) { - lp.width = (int) (18 * dm.density); - msgView.setText(num + ""); - } else if (num > 9 && num < 100) { - lp.width = RelativeLayout.LayoutParams.WRAP_CONTENT; - msgView.setPadding((int) (6 * dm.density), 0, (int) (6 * dm.density), 0); - msgView.setText(num + ""); - } else { - lp.width = RelativeLayout.LayoutParams.WRAP_CONTENT; - msgView.setPadding((int) (6 * dm.density), 0, (int) (6 * dm.density), 0); - msgView.setText("99+"); - } - msgView.setLayoutParams(lp); - } - } - - public static void setSize(MsgView rtv, int size) { - if (rtv == null) { - return; - } - RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) rtv.getLayoutParams(); - lp.width = size; - lp.height = size; - rtv.setLayoutParams(lp); - } -} diff --git a/model_zoo/official/lite/MindSpore_inhand/customView/src/main/java/com/mindspore/customview/tablayout/widget/MsgView.java b/model_zoo/official/lite/MindSpore_inhand/customView/src/main/java/com/mindspore/customview/tablayout/widget/MsgView.java deleted file mode 100644 index 8467c908a03..00000000000 --- a/model_zoo/official/lite/MindSpore_inhand/customView/src/main/java/com/mindspore/customview/tablayout/widget/MsgView.java +++ /dev/null @@ -1,150 +0,0 @@ -package com.mindspore.customview.tablayout.widget; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.res.TypedArray; -import android.graphics.Color; -import android.graphics.drawable.GradientDrawable; -import android.graphics.drawable.StateListDrawable; -import android.os.Build; -import android.util.AttributeSet; -import android.widget.TextView; - -import com.mindspore.common.utils.DisplayUtil; -import com.mindspore.customview.R; - -@SuppressLint("AppCompatCustomView") -public class MsgView extends TextView { - private Context context; - private GradientDrawable gd_background = new GradientDrawable(); - private int backgroundColor; - private int cornerRadius; - private int strokeWidth; - private int strokeColor; - private boolean isRadiusHalfHeight; - private boolean isWidthHeightEqual; - - public MsgView(Context context) { - this(context, null); - } - - public MsgView(Context context, AttributeSet attrs) { - this(context, attrs, 0); - } - - public MsgView(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - this.context = context; - obtainAttributes(context, attrs); - } - - private void obtainAttributes(Context context, AttributeSet attrs) { - TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.MsgView); - backgroundColor = ta.getColor(R.styleable.MsgView_mv_backgroundColor, Color.TRANSPARENT); - cornerRadius = ta.getDimensionPixelSize(R.styleable.MsgView_mv_cornerRadius, 0); - strokeWidth = ta.getDimensionPixelSize(R.styleable.MsgView_mv_strokeWidth, 0); - strokeColor = ta.getColor(R.styleable.MsgView_mv_strokeColor, Color.TRANSPARENT); - isRadiusHalfHeight = ta.getBoolean(R.styleable.MsgView_mv_isRadiusHalfHeight, false); - isWidthHeightEqual = ta.getBoolean(R.styleable.MsgView_mv_isWidthHeightEqual, false); - - ta.recycle(); - } - - @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - if (isWidthHeightEqual() && getWidth() > 0 && getHeight() > 0) { - int max = Math.max(getWidth(), getHeight()); - int measureSpec = MeasureSpec.makeMeasureSpec(max, MeasureSpec.EXACTLY); - super.onMeasure(measureSpec, measureSpec); - return; - } - - super.onMeasure(widthMeasureSpec, heightMeasureSpec); - } - - @Override - protected void onLayout(boolean changed, int left, int top, int right, int bottom) { - super.onLayout(changed, left, top, right, bottom); - if (isRadiusHalfHeight()) { - setCornerRadius(getHeight() / 2); - } else { - setBgSelector(); - } - } - - - public void setBackgroundColor(int backgroundColor) { - this.backgroundColor = backgroundColor; - setBgSelector(); - } - - public void setCornerRadius(int cornerRadius) { - this.cornerRadius = DisplayUtil.dp2px(context, cornerRadius); - setBgSelector(); - } - - public void setStrokeWidth(int strokeWidth) { - this.strokeWidth = DisplayUtil.dp2px(context, strokeWidth); - setBgSelector(); - } - - public void setStrokeColor(int strokeColor) { - this.strokeColor = strokeColor; - setBgSelector(); - } - - public void setIsRadiusHalfHeight(boolean isRadiusHalfHeight) { - this.isRadiusHalfHeight = isRadiusHalfHeight; - setBgSelector(); - } - - public void setIsWidthHeightEqual(boolean isWidthHeightEqual) { - this.isWidthHeightEqual = isWidthHeightEqual; - setBgSelector(); - } - - public int getBackgroundColor() { - return backgroundColor; - } - - public int getCornerRadius() { - return cornerRadius; - } - - public int getStrokeWidth() { - return strokeWidth; - } - - public int getStrokeColor() { - return strokeColor; - } - - public boolean isRadiusHalfHeight() { - return isRadiusHalfHeight; - } - - public boolean isWidthHeightEqual() { - return isWidthHeightEqual; - } - - - private void setDrawable(GradientDrawable gd, int color, int strokeColor) { - gd.setColor(color); - gd.setCornerRadius(cornerRadius); - gd.setStroke(strokeWidth, strokeColor); - } - - public void setBgSelector() { - StateListDrawable bg = new StateListDrawable(); - - setDrawable(gd_background, backgroundColor, strokeColor); - bg.addState(new int[]{-android.R.attr.state_pressed}, gd_background); - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {//16 - setBackground(bg); - } else { - //noinspection deprecation - setBackgroundDrawable(bg); - } - } -} diff --git a/model_zoo/official/lite/MindSpore_inhand/customView/src/main/res/layout/layout_tab.xml b/model_zoo/official/lite/MindSpore_inhand/customView/src/main/res/layout/layout_tab.xml deleted file mode 100644 index f9b6c58f88d..00000000000 --- a/model_zoo/official/lite/MindSpore_inhand/customView/src/main/res/layout/layout_tab.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/model_zoo/official/lite/MindSpore_inhand/customView/src/main/res/layout/layout_tab_bottom.xml b/model_zoo/official/lite/MindSpore_inhand/customView/src/main/res/layout/layout_tab_bottom.xml deleted file mode 100644 index 2efbb1c87b9..00000000000 --- a/model_zoo/official/lite/MindSpore_inhand/customView/src/main/res/layout/layout_tab_bottom.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/model_zoo/official/lite/MindSpore_inhand/customView/src/main/res/layout/layout_tab_left.xml b/model_zoo/official/lite/MindSpore_inhand/customView/src/main/res/layout/layout_tab_left.xml deleted file mode 100644 index e2bbeb2c4ce..00000000000 --- a/model_zoo/official/lite/MindSpore_inhand/customView/src/main/res/layout/layout_tab_left.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/model_zoo/official/lite/MindSpore_inhand/customView/src/main/res/layout/layout_tab_right.xml b/model_zoo/official/lite/MindSpore_inhand/customView/src/main/res/layout/layout_tab_right.xml deleted file mode 100644 index 4479c9285df..00000000000 --- a/model_zoo/official/lite/MindSpore_inhand/customView/src/main/res/layout/layout_tab_right.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/model_zoo/official/lite/MindSpore_inhand/customView/src/main/res/layout/layout_tab_segment.xml b/model_zoo/official/lite/MindSpore_inhand/customView/src/main/res/layout/layout_tab_segment.xml deleted file mode 100644 index 3ad6bcd0d94..00000000000 --- a/model_zoo/official/lite/MindSpore_inhand/customView/src/main/res/layout/layout_tab_segment.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/model_zoo/official/lite/MindSpore_inhand/customView/src/main/res/layout/layout_tab_top.xml b/model_zoo/official/lite/MindSpore_inhand/customView/src/main/res/layout/layout_tab_top.xml deleted file mode 100644 index 0f757a004ef..00000000000 --- a/model_zoo/official/lite/MindSpore_inhand/customView/src/main/res/layout/layout_tab_top.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/model_zoo/official/lite/MindSpore_inhand/customView/src/main/res/values/values.xml b/model_zoo/official/lite/MindSpore_inhand/customView/src/main/res/values/values.xml index 0066f966e02..b37fb9bf371 100644 --- a/model_zoo/official/lite/MindSpore_inhand/customView/src/main/res/values/values.xml +++ b/model_zoo/official/lite/MindSpore_inhand/customView/src/main/res/values/values.xml @@ -1,163 +1,20 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + - + + diff --git a/model_zoo/official/lite/pet_classification/app/CMakeLists.txt b/model_zoo/official/lite/pet_classification/app/CMakeLists.txt index 08b01d83aa3..651f6af6a69 100644 --- a/model_zoo/official/lite/pet_classification/app/CMakeLists.txt +++ b/model_zoo/official/lite/pet_classification/app/CMakeLists.txt @@ -8,27 +8,21 @@ cmake_minimum_required(VERSION 3.4.1) set(CMAKE_VERBOSE_MAKEFILE on) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}) -set(MINDSPORELITE_VERSION mindspore-lite-1.0.1-runtime-arm64-cpu) +set(MINDSPORELITE_VERSION mindspore-lite-1.1.1-runtime-arm64-cpu) # ============== Set MindSpore Dependencies. ============= include_directories(${CMAKE_SOURCE_DIR}/src/main/cpp) -include_directories(${CMAKE_SOURCE_DIR}/src/main/cpp/${MINDSPORELITE_VERSION}/third_party/flatbuffers/include) include_directories(${CMAKE_SOURCE_DIR}/src/main/cpp/${MINDSPORELITE_VERSION}) include_directories(${CMAKE_SOURCE_DIR}/src/main/cpp/${MINDSPORELITE_VERSION}/include) -include_directories(${CMAKE_SOURCE_DIR}/src/main/cpp/${MINDSPORELITE_VERSION}/include/ir/dtype) -include_directories(${CMAKE_SOURCE_DIR}/src/main/cpp/${MINDSPORELITE_VERSION}/include/schema) include_directories(${CMAKE_SOURCE_DIR}/src/main/cpp/${MINDSPORELITE_VERSION}/minddata/include) add_library(mindspore-lite SHARED IMPORTED) add_library(minddata-lite SHARED IMPORTED) -add_library(libmindspore-lite-fp16 SHARED IMPORTED) set_target_properties(mindspore-lite PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/src/main/cpp/${MINDSPORELITE_VERSION}/lib/libmindspore-lite.so) set_target_properties(minddata-lite PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/src/main/cpp/${MINDSPORELITE_VERSION}/minddata/lib/libminddata-lite.so) -set_target_properties(libmindspore-lite-fp16 PROPERTIES IMPORTED_LOCATION - ${CMAKE_SOURCE_DIR}/src/main/cpp/${MINDSPORELITE_VERSION}/lib/libmindspore-lite-fp16.so) # --------------- MindSpore Lite set End. -------------------- @@ -74,7 +68,6 @@ target_link_libraries( # Specifies the target library. # --- mindspore --- minddata-lite mindspore-lite - libmindspore-lite-fp16 # --- other dependencies.--- -ljnigraphics diff --git a/model_zoo/official/lite/pet_classification/app/download.gradle b/model_zoo/official/lite/pet_classification/app/download.gradle index 15e9aa80821..9b32e9b6115 100644 --- a/model_zoo/official/lite/pet_classification/app/download.gradle +++ b/model_zoo/official/lite/pet_classification/app/download.gradle @@ -4,13 +4,13 @@ * The libraries can be downloaded manually. */ def targetMindSporeInclude = "src/main/cpp/" -def mindsporeLite_Version = "mindspore-lite-1.0.1-runtime-arm64-cpu" +def mindsporeLite_Version = "mindspore-lite-1.1.1-runtime-arm64-cpu" def targetModelFile = "src/main/assets/model/mobilenetv2.ms" def mindSporeLibrary_arm64 = "src/main/cpp/${mindsporeLite_Version}.tar.gz" def modelDownloadUrl = "https://download.mindspore.cn/model_zoo/official/lite/mobilenetv2_openimage_lite/mobilenetv2.ms" -def mindsporeLiteDownloadUrl = "https://ms-release.obs.cn-north-4.myhuaweicloud.com/1.0.1/lite/android_aarch64/${mindsporeLite_Version}.tar.gz" +def mindsporeLiteDownloadUrl = "https://ms-release.obs.cn-north-4.myhuaweicloud.com/1.1.1/MindSpore/lite/release_0220/android/${mindsporeLite_Version}.tar.gz" def cleantargetMindSporeInclude = "src/main/cpp" diff --git a/model_zoo/official/lite/pet_classification/app/src/main/cpp/ImageMindSporeNetnative.cpp b/model_zoo/official/lite/pet_classification/app/src/main/cpp/ImageMindSporeNetnative.cpp index 7d8629a2cf9..55d2364bcbf 100644 --- a/model_zoo/official/lite/pet_classification/app/src/main/cpp/ImageMindSporeNetnative.cpp +++ b/model_zoo/official/lite/pet_classification/app/src/main/cpp/ImageMindSporeNetnative.cpp @@ -29,7 +29,6 @@ #include "MSNetWork.h" #include "lite_cv/lite_mat.h" #include "lite_cv/image_process.h" -#include "mindspore-lite-1.0.1-runtime-arm64-cpu/minddata/include/lite_cv/lite_mat.h" using mindspore::dataset::LiteMat; using mindspore::dataset::LPixelType; diff --git a/model_zoo/official/lite/pet_classification/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/model_zoo/official/lite/pet_classification/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml deleted file mode 100644 index 036d09bc5fd..00000000000 --- a/model_zoo/official/lite/pet_classification/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/model_zoo/official/lite/pet_classification/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/model_zoo/official/lite/pet_classification/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml deleted file mode 100644 index 036d09bc5fd..00000000000 --- a/model_zoo/official/lite/pet_classification/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/model_zoo/official/lite/pet_classification/app/src/main/res/mipmap-hdpi/ic_launcher.png b/model_zoo/official/lite/pet_classification/app/src/main/res/mipmap-hdpi/ic_launcher.png index ad551dcf1cbe832e9801f25e147679b728a79246..a571e60098c92c2baca8a5df62f2929cbff01b52 100644 GIT binary patch literal 3593 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 P00000NkvXXu0mjfP=x?Y delta 2518 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 A9RL6T diff --git a/model_zoo/official/lite/pet_classification/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/model_zoo/official/lite/pet_classification/app/src/main/res/mipmap-hdpi/ic_launcher_round.png index 12602e9e7b70a988c28e122846fcf6881d6477ac..61da551c5594a1f9d26193983d2cd69189014603 100644 GIT binary patch literal 5339 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 Tbj3@f00000NkvXXu0mjfC6n+Q diff --git a/model_zoo/official/lite/pet_classification/app/src/main/res/mipmap-mdpi/ic_launcher.png b/model_zoo/official/lite/pet_classification/app/src/main/res/mipmap-mdpi/ic_launcher.png index 534bc3b190c0ed1b85b242743357fc1259410075..c41dd28531901b2c23927768c84bb6765ebcc1db 100644 GIT binary patch delta 2628 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 FV1moa%aH&8 diff --git a/model_zoo/official/lite/pet_classification/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/model_zoo/official/lite/pet_classification/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png deleted file mode 100644 index 0cc30d70ba56155109f5a40d8ae1cfac7662e592..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2676 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 GM*Ii3(JZ(C diff --git a/model_zoo/official/lite/pet_classification/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/model_zoo/official/lite/pet_classification/app/src/main/res/mipmap-mdpi/ic_launcher_round.png index 13d25d7dcb9b0be595242856b5feed76ccab935b..db5080a752731b34d38d7c634732b2cd999125d0 100644 GIT binary patch delta 3386 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 N002ovPDHLkV1h5-R$Tx9 diff --git a/model_zoo/official/lite/pet_classification/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/model_zoo/official/lite/pet_classification/app/src/main/res/mipmap-xhdpi/ic_launcher.png index ce4d40a73968ac2ecd2c3bb242f5440b184b867f..6dba46dab19242bf475ddf2e0a10042de6a0be16 100644 GIT binary patch literal 4926 zcmZXY2T&70vw#yMn9vcVN)dzvqy&+o^xl+?0YMU^i3A9ubR_g5AVnZb6;MH{w1Bh# z(z`V2z4uNi^6mR-|nJ ziD!nlM5WpyKdG{c3k2M;jXYyyVo*^yGIoo3`~=S|F7P^2q1SWS$X&WX;`m|lvakY#7qwtaxT_5#?fq+k)xD_wHQ zyOv!iWuFs&s&k8$>66s&pN$6(OHEJH8Iv+e1ce=IQ2k}QWOKrE(R&G&rrwRul5JO? z9Uk8YLMp2>9IqF#Te_G{OqvQMdu+CapwA4T<&Q@QcIv*Lg9wCU@r|C(t0{!0uNy}p2{-c$-u10k!W;Vg~%I&@z+#7Zi7r~hD8!> zpn1}&ANh%cY`4tCA32CA8i#xOs?h4F_7zdAHMab<*W)CuwR|(~gd5`m3bQqKX^YNG z+~{>s$Jk%6cClss$H84jVN#H-lJD2DGwI}SA zu}tz|ZwBc|Pw=EGw^kh`Vk_xMX|KfNCGdbgab3{y-S*BeH0I5?Fmdh355OcbEk&^| zvJH}xPR|SFnmgsUkXAZ4wj<1U04=0TZjaXuYB~;x?~Ljrb98Ioa7$W@Q2QHJmAU3m zqlJ2~r0VR++WqVw;&dIr@dIHqjUh+ASQh@B(NS@~cD1|dsV_-;UPjE8^RNw3E?oOx zSawJ0BrAl>2pdY6WexcT5X1q?^`Am81jG3nOs~fmQ$LhX9bynlAH4$-4lBA9QiYq@ z87)AMgAz(4!fMjm9M<0w0a6v{tIV^NELObpXP3`b)U*@x89Tb^oO+db`gC@e(i|b` ze67ZZ)BB~r(*Qpqoo`Z}T1l_aj#u&OY)!Dzm}f9df7x`HDRr$b;S`>(2aRx?w^7$t zp_L2SLwiLhm-FJ$ZHb+HJ7c0JKl0+sH@!SL|IheR2Of?`TP?pRa8i{~W;*EZeiU;! z5qg1lRW#x}?|K&Fq6|x^H3Q09CRZ14A}?5rOE%fsHgbZ;pRpI;nrtX##M(YnKkkk3 z+~&?#V1fxYR?-#{_;rMDS7${>_1W~iW^pf+R{8V$q~hG zUj~ld*aJ{`0%9kHw*9lEZDL0H32F{V&21_p^|9KQOZ%(tH&iu#-3N2M1Oqu=%QMi) z3a!@quYHxs5mE$*16Q&)2UBmDU*nJw+cVC%T6}3p3y>DMkb|)L)lti?c%_LG1@z1Y z`O0Nc)Qe2`t(A=Nx@S-67lfIMT>Z~C1iCb;(6G!=-@6n{h*4Lbzb@xt6wbJ=GtlqPq%4|UJ~huHD1cmeY)$p=}87X%EjT<#QNXdk!a+04QLozV|jq@$tbmh zpao9vHJHhQpjvywl(1?PE{BS zfR{NBD8e6C^$``kE!T9P9nZe@25vZLg&y^Ao*qb^nTes4#=LOmYXkDsiTF=zn}0jrbE{YJ2QDvE0x2)7y(Ha}6$KtxlNp z;n(;S{ex!!X?=Ij-kdhogzEktXGnH|JzUO_edSyAXRv4nLYTwEfl#KVS+7%bqIYCP z&ur^~ZSZtANr8eUyQne{v(gw++&~%2)9p(*3iM+2oFo6$4_%fmG}($R8Zaq{=*v4` zV!nyJ@5vIXQ1m?j1P)8`sLf>nrc_UlatmZ=)H+st(SRps zxN#&CRCYp(79mnAy*pBRv1>hmJjf?BH^u0slOl&xgTlsm$Om)hVJd^1pw4p?10fzlXzO(| zbC^>xs!xnAKfHePWTo%hPXFv8`7IYqX4gT` zQp(=7i+KlBm-}5**KPuCw9u!rR)J;9#3s|m!}eO2EEDB?Pkw-lW*+C<{DR2Le5qD; zzW@8)0)O3mN~otlX@tuhMxW;eIGuX+$rh3RWDgY7H8H4MMK0V0;bN9|!@w63^l3&5 z&0)q+q@6rD=7qQk$KedGU)PVDaA-g0fo}fn9X~WTc}y8_Lj%CE2dVh@8NOLV10^oF zQI_gsGrQl%rRNcT`SgZzAFOvvC4dF?AeqWY?4l@*#U3O*MGdG^xOm5JV%3;SOATnC z?9tAd{*w^|RtEk`S%@DO?b=lWR>)||^HL+is%@`JzWz^pKeH;4-@qzLS8dlpcx49nHQ47}Z2YEuTDZEA(kW3fYY_p}B6cIFk zMbt8vgs1oug8 zCnR@us&d9lEL~oxDKzSww@MWCZXwy07+^2K-AXe{GvG?+83e%j7Yl=f%Wb4B)huao zbP=@84F{aNVYG1Qhajw~Y1qVPFM1Qkkb`Yy&!y;yTE(C{18v*gn>iwt74810m`a_j zaeX94mEQ@K&M}<#Z@w(hKC*E2WHWD)aW;8Ua;S+nTxrjgc~uYuVX9eNx@n2>nQ}l) z;B1~Sl1qH^^=wCgv3{;zvR7E`t1eGiP7&c2d+p1;-4J!)xm3Fy$-)_obcQRPY%u7? z7XZstD$nFs>PYE%Mk7Z{QrB2riY@bl%aA*O>%{wOH%T-++P~>LC$UivlwLe&{{}*+ zkbH2ug77!!3m_rRpBFHht_jt>Us4q($OqsvHD3?|8t7vwAtJ;_*cvb{S`NuWeEIon zjsj(8M}cyEYQ>V-6XE1Hk4Wp-sts3$%7Mpv9*9VOz!5|H}i>_1X} zG`$FAG#B1$-wY#f-mxdT>FlkZLKBH?LVAFB!E}EpL75H{6wBvM^fdB%R?-j~0d|zFTA*n!Sbq@R7I$sS)Sf>=TgS> z7DkZ`m`^wC_Q@rUNntv|0Ijbf9@edvA$M)+#jMo`0r?s#41#UZ0l`5jQ8RIPkWYkL zLuSnjlMf=nsvrXsbLOTQ^D;=vJ4mu6B%p$6II+3u_iquF#Dv=&_{Ne5M{*;lK;68G zCcB|s+9?b}BBHf%?-TpXD^VR_P2J5myX1qdO&uW~Rc4(W7+B=mt#w&%j7)yuSIH`t zvogKN-ARwD5bj&d;OK|`hx40`q@@8|QhsDpp0fOFB|4a zU1aM=Yf<2ymK zU)xMo{8RuIn0NEhLK+-->qo3hthYqL6fpI~8=Tz!8VDrj z@vG(yaO``ZSJL~M*f_nb>_GJJSMJoZ*88oEkhy(K3iaPYXuH$dX>EnPP{xi--@Dwg z8bG_SeeY6%=g@5Mxo0Doc1WM#-}0nC;rzZU_NEIRnJ6u}J@fBxdZ$f@l{?MD&mg$S z$EPCM$0zZwcWT`FU8Ej^5NG;)p+aG`xn!?$Ve)&}j!{ORq1@*_ZMk}L0Xz(ns0%wv z9I$7!d>;Njr6K{E7`|9mr3TLh#}wtivvU+hRX$+hNoyYhzm|q6NXEYB#;z=!b~YVO zWr0qjXwDrkt-=^PD4HVWGMq`hmTMQky0!3gBy|fkG9WF~kSkw-QzO(sS=AbRuW`op ziGH!+lMV1j#rCixt9)sG6m~TjhW8@qc&IPD{BVWND zE}dlIZ@O6{V18XdiKR=l<6aTB2BC&kpPu^4(Q%5cZf_ImMCN6)=Q;MHw2-oy@2Dq? zBq7jYByn6Ri}-6uueQEcae}Jfz;iW9-@@@%gT6?;;VkD{|RNoav#$0VNE zk286ieB7O8wkeB~4|tO=-Xbmsf3}F4F>ZOgHfk8otsKVsWsAHTSaa8kixa6o-Ri^V z0)MR_rp^PW%$7L2Smf5N&hU;cW4ZGprO>fj*|YxR`_GR&s^#MgsOp7EmAx&@#MrCd zyIaPnnh;UNM5d{7{h@D7*U-~T?d!MX93o|1b~=jXSLmU?qT;fW${(B>2Xkjm*GkNF z&(^d3J)=9>N78NIp1Mp3lsdWVqBKFPu2q<(dE3}t|E*)2wDb9~gCECHE8@~_#Vp&a zzNrs!hW)H{u=fDT_Q!n=TZu}6ReD;sxxz$>nGv(gZ_nfn$9$tX4+=jYBPzMCYd^E?MxrjPMS1-IQ=sdMT3t-ZAdgCLUD+8kc;k&X-gx7UH{N*TZR#{4dKNL0hZxWPkiv^63)V2RLjDftyb#*wpJd3Ro24Hv;lwz+1c5z zOxQ>mJjlSnz#is&oXmogJ>sr^BA6zY{{DWdtE)ROApi!aS1BneFW}&%j4;E^#U4Ed zwP|i{zUS=h{Nm#pelPbcmC89daHo6{fs6fA00PSrZEbB`k&%&ezxODRcYY=}H}@T! zz`y~F4?sspM{h_-$X}Rt69M4ajEs!ma{%K9(B9r|2nq`NE7NWw0L;94_3Ath;5z~6 z4GawY8`F*h-~c!P4uAvT05|{+fCJzFH~9ASI<1nSUB(XM+edIajk)++Za zuY=%61#&tlkZ*)Qdl7EOq>(UX09?bx1{uB;xbPFW*sz|-0T7WV(3VSx7=bol5NK1B zK%NkHW4J)Oq6IQrq<;AdfmXxupTYfMDFP`P1X8sMG+>=V0ImSQVg1NB1eYD`7U)>l z0+ zA`}-Es)ZA~M@d<@_^y6j{9u^I=eWV>HX@Z6hNG*Oz0Z+-q6-At886TdjDqd40&P7n z(3cFr35$mpAj0CZym=*5Mfte4$iDUeSE1TE^NWmyfB z(WJLI3Yu|z&(vY}yTw~+MNB8Hyx2_l+xl&uw*dfLP6EIY>>E6?28gK$*U*LI_nD^P zN_Y^!Ar#$;F)n}=-@qCGsFK|8Qw|{ubO4|tpQ2Xkvsj;Uu>vJx#CRl2;xqRlK`glt%xfqWQTgBY3En~S^(=%wd{U~zq1t1%+u0R z0Qe-ck(Aw|7h^q+>x;tcfz;!Eg}EQaGDb^_qSWLVrJ)-SjkW<`Zolq0W;n?88%|6| z0C4|7%=s(E$ej(CGWy?_+`qF7)5N=&qvv$e(o7XC$xu;PRoAFf(&8pL_si~gy=6+*R&t7KCI{L53&YjqmuY()Ap$reEwZK`0Hl@uaR2_6u>quO zq|_t2{|*W(Ak=6ru}Ubk3`?_$-wF=^QSUuQ`*!7Hs@1i;+C@Qj*VF13=$Y<=o^>!&pUa8*U?Gc}~vS?J6i+5HgT?UF$GwbF48 z-s+@{gvh!6LBha1GXxnY7#v zq}$3v#aw9^NaYNLGuxP&R_KDd8xt!)5xY!zH2 zyFUkUOQ7t=k$u{GE##7}p*0Bx$^8(26Smc@-&)YAO|&#ZLm$ZiJ_=S-a)rT80bp^p zuMPleAdHP?sS4DJT`0cZaK9G-cmqI5%aix~V=MLKoob;S$*31tfQ4YBSiUvKf7sqn zE2EleVVH&%!2Jt?H565#vr_=AlKXuz#Vpl6y;?MT^O(~ zXa-1)Rtl|gw7a8Ly78co(yNS=#-h?l3XR!50bGQrzHq-U3Tgpdt~Za2$@o+Rd%&XA z4+neZ%N{#UPXKVU?*r*EBfHlhi1_BdKu4+sI;of(0O43aY&tm{?#HE%olIK*;zM@D z@MFfo`#pZ8lLH{|vLyCsG5w~Y0N@7zd*S-M0N@J%dm#L705~v70FGnbu=?QW!9IFo zo=yPzFhkK>p3MC$43ks?dQk&<45P<*KmE)<9nJrL00+PUZ~zN%i#&l$e-=xJoKjBL`qB)~|Ob zC#N;k(<6O2DmL~Kz5DJz>EXi~s;sP{w6qLS)Ul3p`t(`K%F3b#4<69!)y@2*U4n+r=v%Y)84)Q zVqeye?R)>elD2R6Auq2Tv~lAW%FN87f`UTYvc-%2F+8$ZhM)81=NC|Tc!YR9b{sb9 z7}(t0JaPXWJ9g2%dzI3?AoL3eI7mBp?k0_LZT=b zbN`7G!PMK^D~_x+Yn(;lQ&ZDu-@X8qdXIy!03o_%!lX0`|*BqUVq+t$`59)pbvKfnFbGiCI5bK59`-9l=$ zMtq&sqoqqf6-R`>{{i$57%{S@4S=DKpFq&j0C;$81^@%zaEB;fS68*if`U6@3SzY*BjY+!+6K|R48XEwpNf!YW1*p^DJ<-an4;J*832}!A|j$FK0a~ioHaGI z6d8G*qN8KQl*3-j$+^w`tni>vq*PXm`$b2`P*YPAUkCg*5f^ubu3byxv!KZeHdx{ym_-_^M1eYkqHhCW?xeFQ-wlt zf-V1X0t-727kp$un@3C=c5^W$CFLyBOxAA3L;!fv!NK9rjcDw~7CRA6I=}`4PHfk~ zG+j{>FMc+k)R%Y(#4z9SlZF) zbW~DOqH%R~UCy-n@WT&ZV%p7^p!VEbZ@u*kY=8T~2OrFji;FuC(lreY4LxeL+KA|t zxAqj`HLFxA9n<3C#ful-fB*e|F^$mJ7r9O7cSsMcWb(TE_yLP4l(}HOtYxB&EAE2?5 y%#`!o^L8H3$y)p%!t=%(Z@lrw8*jW#kMQU390Pavo^yR6CrzzrHr-lq#~7V$WF#?W{j=D(2#Y= zZajpN!H^7Qtl{3KUm|<3fH{$P7vnv;* z468AO^vFM1k{s(9cc1{CoDh z?)NWS8%Ml(iv^NM9jXQVqE$r}KsdpNE3Vlv^dgxlTP8?AXPze@r0)e4m@`!J>!l4X zfDN_;ZL2+$<-XdQ^-BR2JuHFef%G=S{W`Z4GI;H9#{Kc2ROE>cq^@r+So&YE zO62@duLsnKSzxf+o?-YhkCstgLV1_#Y^S;z`Vw*-t~+}TZ$ACNQA?3zPbik0-3XZW0}XZ+etO3z3i1gGg4wE0ndsY6kjz_dsL=MUVy?uCz(#PUUhK8NK#T2RGA z74y8k&~>%hRMlP3)~~lmJxaa7lhALrcp({N%lN8`(KJ>NjzA zNHc^n89Lwo)>>Opx5QrYxLt-#lf8Q}&>0 z;a5TyAF<^*)RXXc5G`ZfLYY@Vce`2wv@6vpeo9-GnlqYo5VdHByAR6!38DC*GH@GE17BAof zJW19B(R~qQ@wG2dhvFydwK`t^yCwGwI_~k2%8Q$~Q3Ti7;LT&=-_MBtu}$ zeYIhZTrvZ~7%ern&P~1g$ylwcHq5Z}OR=Ac(%-e^4QQ4p*4I(RFVhvWe!Sr>0D2Nk z5q<$Hv`g&;=c!-qKf?H#UYlw<_o9f0!b*e5%+Lu}PtV?dfBsrVy*TmHXw7-grMzu( zfDJaPrnaa|5O59(2)R8!{FL-|M8nh5h}SAJX>2W8K*75ugDU5^n40(p|4G8Ts(~7Y z7R37AAgVFC6J`v&6p06l*pgwXY={zxPj+7?-SQ@J(a=OoAtcLFQhj&AX27Yb$z|4>Xi63_T;~|gv4gh6^;&lUDItHq zDoc2xkk#qnX*BBpIkD>CxtBJ{P{0NA&yX_r7F87w*-xkt2b>cHRKZAZf=e8SP)%j& zr#@;BOk*D3D&B27d|hmeQ+#1V=+J%=r~o$(RElm;I()CL4Z;OiX=>pe2@B3!8XDWV zEvGX7EzW6Ku|BSTYcU^K6H0Sml{RB9z11(g7O)6T3k z#yxgZDT7$(NQ5N5q}0C~0W(xM!zW!4+~6O3vH=x?MVw3N@@^UOSyiqszQtH%#9ovU z8!N=>BI(;$QmXBt^wdkU6(NCNctULvSu=(wi9Sf(&>_aCaR`*M3!pl0Q!=9ja{~8G zxMw?$PqBoW4?W6spS{{#vgpUgDd1s&g<0d?Ymfs906E?l6nK#=w#dAX;}z5(nu$4D zA#36#K<_R#1mW~SMC9kTBcVImOe0)7d7KT+Wh2lDv>&%@ zmqijGM)&V|wR>e=17j@3g`_GWN%a*)N>fo74Kn;F`5lulK#tS-$S6SUGF@y+$OmDU zI;c$oVYI{#xRtI?O85YqoG=eQ+{c} z6L}DhT95JZ?ur*rQe4hMqH`9rmD#;#d9%TxWwuDClYeB`ShRC>O zxyE3qX=yPSe5CH>(JEp%YW7Mkp?o|C_P{?WP#>?@t{PlW_M)z}fvQ8S{A9R@$b~tZ z;6izj=*^Ao>ir^h^4bx*O)hj_bZ!htiZfT)WfU7%4I!6gRcuPwPcG3>jM9e$hz zzWZU(SIc&uP%dzdi-CmDx>UIdK;547Wpc)EO=26Bd0#2x-Ly#zeD>8K+SWKgq4}YW za*Ac5L%?of7_ez=#=F)-hlq*rBZt6s7ElhkF|$EJlYz}JQYm9q_uU$&rPoU9*t7UyBWehR@mTI zrW+FZJ1HU4*LzwzLK2%2VYA7!u8Ba+6Np<>V^4ol`@&-OZ*;9V(uo^tW82J*3cB)J z8srj2GF(EL82+abKcrOiC|R5I*S(~@XvbegwM8YA%K`xdl=_jV7CI9pBk(KR4j1%q zC2SU-cx9x@=G_m5uG4>reqXvqD_A`=rRFKUgKvn2W*4~GBXItdTMqA#v?RX7-dlux zWb%ydx(@Lx;)C#LmRll>bD${+6mon_4>NhmTuQLwc0*pWvzq*OyW4g-%o6Jr8c0uE zb!WSrZ#N0%wbJ`NF_8{+TY8KfthN3JR=5eMv#WgICj%czH@pfUfAsmeU2e}iKs*Hk z6VGsaeA!F_w&9Hj;qTuxwB%(X@cjdggk&Wsm71u0$w(C zCwQ*duTp&@M>qp`!X^M!D5!lMxb@#jMC^(z;9LWzw;fQuM9_NwIZzLL`!wS0LL0gh z#EGU!Fg=;+ne|Re`T)FNs-g1LL3P`AO=5z=N2It={_Xqp1{$#GX`VaWBt^akfsjQG z%FS~Ar_IxZkjQ})&g;`@MXqhCsl5+8` z=&rOiy|HF^ptI>k2{^#bdXU>h$r^{Lvq)Nv>`?xXMQ5vuQicSo>KM6RRPmJo4-R+* z(Lm_A2{SM0uZ5ka#=qH0ro;LL{3%Yia-N;Lr-q9t8DW(J03Y=)PC?icG zYVwc13mkR#akf|5+_x1EzF*wD0i|6e|Av-RdJs}5!G_Pe5(~RIr9;$uW{I_%xkOUP z_0WuIdH86F<{myI_cd*)d$`(vX`7o_@gt+ilD0qn+cq--rP0I~%@%2f1rOBU+qG3{ zd=4vo0+26p^g-k~j#{>*jNT%AKL94pm^|HTmTyX6NaTy=r>{*k*8B!bos0Cz+nt;$ zBz>qSDmmy0_*XVD_y{E(KDm)Bryg=~APc&xZ9i$LqSO8!NcJSi=@8|>xPDc=iqqt_ z$f$fskei>eXj#M8tYkF4OnB&o#zX2BN}S<}%PyvMARO38oz}jF&wH=2b{F*vP9aQ^ z-ImKIytF6^m=BNwSLLUNGy5<$R$()ogTfR~5KU^H=A=yW*d4C9X%gjUrKJCH+{P%- zX>C?<{Mdbeuh<)k(D;*-D43q@RW5`{Jg#04KfP_O;((ZN#ffmUvHE%8*-Evvdg;mO z7r2nmS$Tg+a)x)jhxTMB4~9Gr%+0c;UF2~%_$S^^cEfRQsNvn{{QTN}R7a`d2H?Qo zN&-!B)W5iL_S9cEyt9N;DawQDv28y@btlscGNG?Eic!i6yUrK5E&~qB3{-yZ$}UHq zEU>b%l0GxpyseZwGncIC^ai5@ZF@tNQ)Vtz$JyW3D7(+?uJ>>+6nc8@P9P4Fc7xat z#=%ilxn&7d1&|Ke=_@=V1d&k(qi!C4+A7Z-tI7q+Uu|j$I{zjX^F?w*3{~AK8m6H2 z{C8LHS&q%?w6?voem|ZWHT--M`|P{T4+)I^&8({`Cq(O<&)4^Y%No|c zJQCDiHn?37tDMoU{RU>MKiL=vE9zZr4rUqJyv6ZJ2_CrM(w#vLdm%M5+RSv|S%|&x z=WjsO0)D$NZ}pfmoD(sOrMA0ivUe|p?P+69-mhsSz?9qe78G-H*A~@mYQ#_{T5Wr! zHhH>7NQd8EZOZ$BGmWvLC-L8x#X!&7V?T58TC-wz%5qL+6PEBLor^93t9-EE3T%FK zt{qH9DQJ;^$Ij z#oTZ83}HRVt4Lr}Z~N6$7R7dQXmV_Ocjm_T0%yz-L~1M8COh*@e9rlu8*P8gFlmtU z4{t-<;d!c7yuk}Be?DmGN7=Hr{xVu*8a8shZ$ z%EV5rU1{#|@o~FmK(K;4^lKQh3KX;DdDv)@vqw7(0U)>_<&+>6QVYm<7dT6ss4 znKpgLe0f?X-i)<@t5ui7^dJuPFm1iBFrAskWfd5!{Mc=QCAWVj+7VOM z*J?>5`g51gT{lt7kzQ1FDv8_mnh^#3^bPv#al8Gmz{Qw8e&^rsdapTHuE*@60?nH( z7Rq-Wd>Q=PNquJ{SX9`S-XD>FW(wwouTM8jP9}7kK-*?TB&sC?aoYZ16}9j65q6+^uQYGE z+5a*{LX&pZa&PNI;3B^jl;m~LS=?HM4Z)bHh?bvtPR9T!5nyufj`4*L zrq1q04gNJY>jOxqkA%Bo=RU}jC8wa<8D2Fq=8{*;*N<}-)})==^CkA2pqvK;0OyS$ zXs3CZQ%($Yvh;m-sw|CNXE81Xc$1^FETJu{9ZGswyU})3_*m#!HVog+4?e8-9ivf7 zrMt-800)W=OFVcU zwu}0;&S-9DHK~*1%}7IRYXTzTeEm0M~{`xYE1Z0Z0=mh4x0eThHXg5sfkXM zdhSCaRtxXHB?qeg<-NXhsA*^ONHHd-{y0J}b{Jb0c4n-;w9kN$-#GVY`qNycxk|)9 z>!8)T>Mx40jsPuDcqp8u@I&(*9*#-qYkdjq@m3=C=?J4CdH+Th#4MO^rM#!b90R+DYf5-A{dBKO+qEZP6Zh-SfYo_W$`-x!?(>hFHJOz{i+h|2<}IVq=UkgdzV2 DP{6pe diff --git a/model_zoo/official/lite/pet_classification/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/model_zoo/official/lite/pet_classification/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png index 674ae88e4d54c6b6eab8eece581c4fb5c228e32b..da31a871c8dc461a1ea114510bfac640307b0a90 100644 GIT binary patch literal 7472 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 diff --git a/model_zoo/official/lite/pet_classification/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/model_zoo/official/lite/pet_classification/app/src/main/res/mipmap-xxhdpi/ic_launcher.png index 7c87876ea0630a0ca13e0246defa735809249bc4..15ac681720f3df43c647bf0c081f0314ee34eae1 100644 GIT binary patch literal 7909 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 literal 6071 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

!vn97J>{7 zO<#71+mwHN1D}t)r%@ctXkT*4!SL-ds?MLwuejD=P`*d`K@O>fkUpKQcQbWY3 zpdeD#`=NTo*%oU}&y_uQmw9#$DY0Y46G|Z=IC_iZCgBfMA$ zZ2G9ezO%%pBE-_vl;_B6W88i6lSBICqrgDo(TNH3_wA}Om@|rx7PX}E3g4Dm!ejFl zhyEUK-v`ixSwvJ+PbaIKW7WEsm3~QAa&p*62w6AK9{rh$EHxPbJ~QG?D}O~v9xg?) zx28#mm3uDHzLh}3pFFXM5N&`x0Y~A)+^4lbrta=+A!omlAkYUnQBignVo@S0D(aQ! z2STZ8WEw<7#2#_-9Ndwhct)pq`U480#-L}a*%vR5uRxk9LK4kt8%*c^s{?Eo7gvk> zgN?Kcy9Wm}Hn-G>Z+5q~LL1I{)c=H?Da{nP(?kVq{fIs+OgK=$spJXZ_E%po^@@_U z78$zQPLwJjf{$2X5{|fQOS|wP55maE*y%t#sa@UOG>;m1kUx0!3kJ%8HBE{ptKF=J zj~_N8@{!Yzt+F&^z_p~ZO^?_yj^HSZt~DDEkA>EuoZC&^&ak$&wwS*^e$79>e|2g( zS?eQRx&UZvYjd3tQ^+G9hXPyU6{4Zgl`9#cFx#dBZ>j^j2d~s1hT1n$~H1Az3`HzEMR*c zI#MvmkoXp^7GL;cTnzj~%eYE(#i_3oou^h{R$>I~%m;6`9&V)NyI&)fmPF20PT5m% zTRRVA(Z!{Y%CKu-;JH#*L{weOc)_J^g@^3AkGD4ibv*lh^{9+jHdIh38Ve`o@cJS^ zs$7^H=?e6I#`4sr@kCw!zCfQwTY-m(FIj(cxfGU{Lm(8hBJn}*#PNepf1RhR zOk0!)P5F|y=&F>zT32=`{|N)u7OtK``cS&XD3Hzwu>VV#ZbP5_*Pt~w>xD-A+7@IxuT$X;Q`2luJ{N;v}1P13qu5Wmhs z^rI=)R-Ur?DjC>)xNJ{BJtp%;YST0w@h>#`4-@@IlCGiA^_%)1NjfwE`7Sm+zt1U8 zO4_vx@(u{NDxL#cG7s>XBqSu4G)u!`$aqSWhlj`I#p(XShqsS2WGYr0S@Ai_k^Tjl zl&mu4*;ZwP#=t8X{+oQ!cBx58IlmVguQupLs1#4|j~MS&dDOJ>c}^J@k9FwsCH``} z8D)QCWn3$@t*x`uy3ORTS+uisJ@8|Bd5;_9`}gAXw1*9Hjm5EMiZ%kDQtYDB zJ|uht*3Zs1%8pxp>Wem)jZ(|{@x<4!M?&_0X%qGS z?HL&G80hPBYifS1Zen60R~OIT5%nu%-oWlCgSIv6$d_G{G1u;_5hcpsKFOjGd=vsb zESRtg-c;t}<6G6uQ;lmQ&mIFYD~6nOl{Nkin(P&Ayx{Ek;T}WTt`hd zB-GpeGny3oE$A@latfV|S?T7>z970*5PYjROr-+<7UjmTN+-zU_$?XczxiFMpEmdE zp+a14%bDSywSSI(kE{mhC>)Nme2l-<4%qLS$3)Yn7bKhb$;byNKjd2uE%c2iuSCCL zJ^z{;DpcQdQh&do4QIC}$fMf0CbVPn;0bYI!7Jlzl-&9IT*dzcuJoc+M0upg+=%2;3*FYXnS9$!f^nnfTe*k*e BMiu}7 diff --git a/model_zoo/official/lite/pet_classification/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/model_zoo/official/lite/pet_classification/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png deleted file mode 100644 index d4b8095ea91305149c7fa1fd9950f40d99cd8ee4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10191 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 diff --git a/model_zoo/official/lite/pet_classification/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/model_zoo/official/lite/pet_classification/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png index 2528822d4dffc4c9a0b414f533197a5eb0734a0f..b216f2d313cc673d8b8c4da591c174ebed52795c 100644 GIT binary patch literal 11873 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 bch3}6_!Z^E0PU9}M+mZ#N)i>HjQsu&-oj&1 diff --git a/model_zoo/official/lite/pet_classification/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/model_zoo/official/lite/pet_classification/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index cae0e3a3260f2b98a9831633ff4cceba9fc54e93..f25a419744727fb48b4b4137b6c6a3a8f2620d51 100644 GIT binary patch literal 10652 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 D6ni4f diff --git a/model_zoo/official/lite/pet_classification/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/model_zoo/official/lite/pet_classification/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png deleted file mode 100644 index c1229997eb0df6dc6e437fe38aa90840c6b4ee60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14983 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 diff --git a/model_zoo/official/lite/pet_classification/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/model_zoo/official/lite/pet_classification/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png index 24849e26b4669ea0426232e3ec3ee0f3565ef28b..e96783ccce844001359f968f5cd9d85b341bd3fb 100644 GIT binary patch literal 16570 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 literal 15849 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