diff --git a/.gitignore b/.gitignore index 0d38335289aef57acce56cc517be2228fc5546ea..9580e83deb86ccb377424dfa58c6a7cd13bdb3b3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,43 +1,10 @@ -# Created by .ignore support plugin (hsz.mobi) -### Android template -# Built application files -*.apk -*.ap_ - -# Files for the ART/Dalvik VM -*.dex - -# Java class files -*.class - -# Generated files -bin/ -gen/ -out/ - -# Gradle files -.gradle/ -build/ - -# Local configuration file (sdk path, etc) -local.properties - -# Proguard folder generated by Eclipse -proguard/ - -# Log Files -*.log - -# Android Studio Navigation editor temp files -.navigation/ - -# Android Studio captures folder -captures/ - -# Intellij *.iml -.idea/ - -# Keystore files -*.jks - +.gradle +.idea +/local.properties +.DS_Store +/build +/captures +.externalNativeBuild +/entry/.preview +.cxx diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000000000000000000000000000000000000..3afba08c42d5abf63ed96693669413a34d7a5da6 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,6 @@ +## 0.0.1-SNAPSHOT + +ohos 第一个版本 + * 实现了原库的大部分 api + * 因为API不支持取消滑动惯性和扩展LayoutManager,原库实现方式改成了继承系统组件ListContainer、PageSlider + diff --git a/LICENSE.txt b/LICENSE similarity index 100% rename from LICENSE.txt rename to LICENSE diff --git a/README.OPENSOURCE b/README.OPENSOURCE new file mode 100644 index 0000000000000000000000000000000000000000..b3a043bb9813b22d64b72895e059fd7080052315 --- /dev/null +++ b/README.OPENSOURCE @@ -0,0 +1,19 @@ +[ + + { + + "Name": "GalleryLayoutManager", + + "License": "Apache License 2.0", + + "License File": "LICENSE", + + "Version Number": "v1.0.6", + + "Upstream URL": "https://github.com/BCsl/GalleryLayoutManager", + + "Description": "使用自定义 `LayoutManager` 实现 Android 中 `Gallery` 或者 `ViewPager` 控件的效果" + + } + +] \ No newline at end of file diff --git a/README.md b/README.md index 7d1d1b93dd9325d6e57f9a66a80fb78f955abfeb..2221ba8018b97ec63f4f8d48c94032e56f19878f 100644 --- a/README.md +++ b/README.md @@ -1,85 +1,89 @@ # GalleryLayoutManager -[中文](./README_CN.md) +## 项目介绍 -A custom LayoutManager to build a Gallery or a ViewPager like RecyclerView that shows items in a center-locked and support both HORIZONTAL and VERTICAL scroll.And View Recycle Machine is also supported. +- 项目名称:GalleryLayoutManager +- 所属系列:openharmony的第三方组件适配移植 +- 功能:画廊和轮播图效果的列表 +- 项目移植状态:主功能完成 +- 调用差异:有差异(因API不支持取消滑动惯性和扩展LayoutManager,实现方式继承系统组件ListContainer、PageSlider) +- 开发版本:sdk6,DevEco Studio2.2 Beta1 +- 基线版本:Release v1.0.6 -## Screenshots +## 效果演示 -![ViewPager](./screenshots/ViewPager.gif) +![](image/gif.gif) -![Demo](./screenshots/demo.gif) +## 安装教程 +1.在entry模块的build.gradle文件中 -## Usage + ``` +dependencies { + implementation project(':library') + ...... +} + ``` + +在sdk6,DevEco Studio2.2 Beta1下项目可直接运行。如无法运行,删除项目.gradle,.idea,build,gradle,build.gradle文件, 并依据自己的版本创建新项目,将新项目的对应文件复制到根目录下 -### 1、Build +## 使用说明 -#### Gradle +1.轮播图效果 ```java -compile 'github.hellocsl:GalleryLayoutManager:{lastest-release-version}' + // 设置界面切换动画 + banner.setPageTransformer(new CurveTransformer()); + // 页面边距 + banner.setPageMargin((int) -(width - (width * 0.7f))); + // 页面缓存 + banner.setPageCacheSize(2); + // 设置数据 + banner.setData(listData, (int) (width * 0.7f), (int) (height * 0.8f)); + // 设置页面点击事件 + banner.setPageClickedListener((component, position) -> { + + }); + // 设置页面选中事件 + banner.setPageSelectedListener((component, position) -> { + + }); ``` -> Be care :if you have used `RecyclerView` in your project , maybe your should use this library as below and your recyclerview-v7 requires API level 24.2.0 or higher +2.画廊效果 ```java -compile ('github.hellocsl:GalleryLayoutManager:{lastest-release-version}'){ - exclude group: 'com.android.support', module:'recyclerview-v7' -} + // 加载item切换动画 + lcTopList.setItemTransformer(new ScaleTransformer()); + // 适配器 + TestTopProvider providerTop = new TestTopProvider(getFractionAbility(), listTopData); + // 列表方向 + lcTopList.setOrientation(Component.HORIZONTAL); + // 加载适配器 + lcTopList.setItemProvider(providerTop); + // item点击事件 + lcTopList.setItemClickedListener((listContainer, component, position, l) -> { + lcTopList.clickedScrollByCenter(position); + }); ``` -### 2、In your code -#### Basis Usage -Use `GalleryLayoutManager#attach(RecycleView recycleView)` to setup `GalleryLayoutManager` for your `RecycleView` instead of `RecycleView#setLayoutManager(LayoutManager manager)` +## 测试信息 -```java -GalleryLayoutManager layoutManager = new GalleryLayoutManager(GalleryLayoutManager.HORIZONTAL); -//layoutManager.attach(mPagerRecycleView); default selected position is 0 -layoutManager.attach(mPagerRecycleView, 30); +CodeCheck代码测试无异常 -//... -//setup adapter for your RecycleView -mPagerRecycleView.setAdapter(imageAdapter); -``` - -#### Listen to selection change +CloudTest代码测试无异常 -```java -layoutManager2.setCallbackInFling(true);//should receive callback when flinging, default is false -layoutManager.setOnItemSelectedListener(new GalleryLayoutManager.OnItemSelectedListener() { - @Override - public void onItemSelected(RecyclerView recyclerView, View item, int position) { - //..... - } -}); -``` +病毒安全检测通过 -#### Apply ItemTransformer just like ViewPager +当前版本demo功能与原组件基本无差异 -Implements your `ItemTransformer` -```java -public class ScaleTransformer implements GalleryLayoutManager.ItemTransformer { - - @Override - public void transformItem(GalleryLayoutManager layoutManager, View item, float fraction) { - item.setPivotX(item.getWidth() / 2.f); - item.setPivotY(item.getHeight()/2.0f); - float scale = 1 - 0.3f * Math.abs(fraction); - item.setScaleX(scale); - item.setScaleY(scale); - } -} -``` +## 版本迭代 -```java -// Apply ItemTransformer just like ViewPager -layoutManager.setItemTransformer(new ScaleTransformer()); -``` +- 0.0.1-SNAPSHOT -## License +## 版权和许可信息 ``` Copyright [2017] [Hello Csl] @@ -89,4 +93,4 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use 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. -``` +``` \ No newline at end of file diff --git a/README_CN.md b/README_CN.md deleted file mode 100644 index 641bdeafae0cb2e89bf1d79773b10a67cc62e964..0000000000000000000000000000000000000000 --- a/README_CN.md +++ /dev/null @@ -1,93 +0,0 @@ -# GalleryLayoutManager - -[English](./README.md) - -使用自定义 `LayoutManager` 实现 Android 中 `Gallery` 或者 `ViewPager` 控件的效果,支持垂直和水平两个方向,支持 `RecycleView` 的试图回收机制 - -## 效果 - -![ViewPager](./screenshots/ViewPager.gif) - -![Demo](./screenshots/demo.gif) - -## 使用方法 - -### 1、添加依赖 - -#### Gradle - -```java -compile 'github.hellocsl:GalleryLayoutManager:{lastest-release-version}' -``` - -> 注意:如果你的项目已经引用了 `RecyclerView` ,那么应该这样引用,而且你的 `RecyclerView` 的引用版本必须大于 24.2.0 - -```java -compile ('github.hellocsl:GalleryLayoutManager:{lastest-release-version}'){ - exclude group: 'com.android.support', module:'recyclerview-v7' -} -``` - -### 2、代码 - -#### 基本使用 - -不要使用 `RecycleView#setLayoutManager` 方法,而是使用 `GalleryLayoutManager#attach` 方法来绑定`RecycleView` 和 `GalleryLayoutManager` - -```java -GalleryLayoutManager layoutManager = new GalleryLayoutManager(GalleryLayoutManager.HORIZONTAL); -//layoutManager.attach(mPagerRecycleView); 默认选中位置为0 -//不要使用 RecycleView#setLayoutManager 方法,而是使用 GalleryLayoutManager#attach 方法 -layoutManager.attach(mPagerRecycleView, 30); - -//... -//为 RecycleView 绑定 adapter -mPagerRecycleView.setAdapter(imageAdapter); -``` - -#### 监听 Item 选中 - -```java -//添加视图选中监听 -layoutManager.setOnItemSelectedListener(new GalleryLayoutManager.OnItemSelectedListener() { - @Override - public void onItemSelected(RecyclerView recyclerView, View item, int position) { - //..... - } -}); -``` - -#### 和 ViewPager 一样添加Item转换器 - -继承实现 `GalleryLayoutManager.ItemTransformer` - -```java -public class ScaleTransformer implements GalleryLayoutManager.ItemTransformer { - - @Override - public void transformItem(GalleryLayoutManager layoutManager, View item, float fraction) { - item.setPivotX(item.getWidth() / 2.f); - item.setPivotY(item.getHeight()/2.0f); - float scale = 1 - 0.3f * Math.abs(fraction); - item.setScaleX(scale); - item.setScaleY(scale); - } -} -``` - -```java -//添加 Item 转换器,和 ViewPager 一样使用 -layoutManager.setItemTransformer(new ScaleTransformer()); -``` - -## License - -``` -Copyright [2017] [Hello Csl] - -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 - - - -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. -``` diff --git a/app/build.gradle b/app/build.gradle deleted file mode 100644 index 133b4c07ac6a1276c3fe397fed7ba2e98daa7862..0000000000000000000000000000000000000000 --- a/app/build.gradle +++ /dev/null @@ -1,40 +0,0 @@ -apply plugin: 'com.android.application' - -android { - compileSdkVersion 25 - buildToolsVersion "25.0.0" - defaultConfig { - applicationId "github.hellocsl.gallerylayoutmanager" - minSdkVersion 14 - targetSdkVersion 25 - versionCode 1 - versionName "1.0" - testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" - } - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - } - } -} - -dependencies { - compile fileTree(dir: 'libs', include: ['*.jar']) - androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { - exclude group: 'com.android.support', module: 'support-annotations' - }) - compile deps.supportV7Compat - testCompile 'junit:junit:4.12' - compile deps.recycleView - compile deps.cardView - - compile deps.butterKnife - annotationProcessor deps.butterKnifeProcessor -// compile ('github.hellocsl:GalleryLayoutManager:1.0.3'){ -// exclude group: 'com.android.support', module:'recyclerview-v7' -// } - - compile project(path: ':library') - -} diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro deleted file mode 100644 index b3608e8cc296a34b259e99bf0fea38a3d20701bf..0000000000000000000000000000000000000000 --- a/app/proguard-rules.pro +++ /dev/null @@ -1,17 +0,0 @@ -# Add project specific ProGuard rules here. -# By default, the flags in this file are appended to flags specified -# in /Users/liusubing/Library/Android/sdk/tools/proguard/proguard-android.txt -# You can edit the include path and order by changing the proguardFiles -# directive in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# Add any project specific keep options here: - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} diff --git a/app/src/androidTest/java/github/hellocsl/gallerylayoutmanager/ExampleInstrumentedTest.java b/app/src/androidTest/java/github/hellocsl/gallerylayoutmanager/ExampleInstrumentedTest.java deleted file mode 100644 index 6b2ced3aae941a37ff9e5ea8e6125a651f79b725..0000000000000000000000000000000000000000 --- a/app/src/androidTest/java/github/hellocsl/gallerylayoutmanager/ExampleInstrumentedTest.java +++ /dev/null @@ -1,26 +0,0 @@ -package github.hellocsl.gallerylayoutmanager; - -import android.content.Context; -import android.support.test.InstrumentationRegistry; -import android.support.test.runner.AndroidJUnit4; - -import org.junit.Test; -import org.junit.runner.RunWith; - -import static org.junit.Assert.*; - -/** - * Instrumentation test, which will execute on an Android device. - * - * @see Testing documentation - */ -@RunWith(AndroidJUnit4.class) -public class ExampleInstrumentedTest { - @Test - public void useAppContext() throws Exception { - // Context of the app under test. - Context appContext = InstrumentationRegistry.getTargetContext(); - - assertEquals("github.hellocsl.gallerylayoutmanager", appContext.getPackageName()); - } -} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml deleted file mode 100644 index fd283500d7fdaa7a579381afad1488428fb10c62..0000000000000000000000000000000000000000 --- a/app/src/main/AndroidManifest.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/github/hellocsl/gallerylayoutmanager/FlingRecycleView.java b/app/src/main/java/github/hellocsl/gallerylayoutmanager/FlingRecycleView.java deleted file mode 100644 index 13aae362fa6f40cd7cbea4d53cb9a02023dfc284..0000000000000000000000000000000000000000 --- a/app/src/main/java/github/hellocsl/gallerylayoutmanager/FlingRecycleView.java +++ /dev/null @@ -1,34 +0,0 @@ -package github.hellocsl.gallerylayoutmanager; - -import android.content.Context; -import android.support.annotation.Nullable; -import android.support.v7.widget.RecyclerView; -import android.util.AttributeSet; - -/** - * Created by chensuilun on 2017/3/23. - */ -public class FlingRecycleView extends RecyclerView { - private boolean mIsFlingAble = true; - - public void setFlingAble(boolean flingAble) { - mIsFlingAble = flingAble; - } - - public FlingRecycleView(Context context) { - super(context); - } - - public FlingRecycleView(Context context, @Nullable AttributeSet attrs) { - super(context, attrs); - } - - public FlingRecycleView(Context context, @Nullable AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - } - - @Override - public boolean fling(int velocityX, int velocityY) { - return mIsFlingAble ? super.fling(velocityX, velocityY) : false; - } -} diff --git a/app/src/main/java/github/hellocsl/gallerylayoutmanager/MainActivity.java b/app/src/main/java/github/hellocsl/gallerylayoutmanager/MainActivity.java deleted file mode 100644 index c9992722a47887e41594496ff1eeadb2444ca4fe..0000000000000000000000000000000000000000 --- a/app/src/main/java/github/hellocsl/gallerylayoutmanager/MainActivity.java +++ /dev/null @@ -1,76 +0,0 @@ -package github.hellocsl.gallerylayoutmanager; - -import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.support.v7.app.AppCompatActivity; - -import butterknife.ButterKnife; -import github.hellocsl.gallerylayoutmanager.util.StatusBarCompat; - -public class MainActivity extends AppCompatActivity { - public static final int SHOW_PAGER = 1; - public static final int SHOW_GALLERY = 2; - - private static final String TAG = "MainActivity"; - - ViewPagerFragment mViewPagerFragment; - TestFragment mTestFragment; - MainFragment mMainFragment; - - @Override - protected void onCreate(Bundle savedInstanceState) { - initWindow(); - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_main); - ButterKnife.bind(this); - if (savedInstanceState != null) { - mViewPagerFragment = ViewPagerFragment.findFragment(getSupportFragmentManager()); - mTestFragment = TestFragment.findFragment(getSupportFragmentManager()); - mMainFragment = MainFragment.findFragment(getSupportFragmentManager()); - } - if (mViewPagerFragment == null) { - mViewPagerFragment = ViewPagerFragment.newInstance(); - } - if (mTestFragment == null) { - mTestFragment = TestFragment.newInstance(); - } - if (mMainFragment == null) { - mMainFragment = MainFragment.newInstance(); - } - if (savedInstanceState == null) { - initView(); - } - } - - private void initWindow() { - StatusBarCompat.translucentStatusBar2(this); - } - - private void showFragment(Fragment fragment) { - getSupportFragmentManager().beginTransaction() - .add(R.id.activity_main, fragment) - .hide(mMainFragment) - .addToBackStack(fragment.getClass().getSimpleName()) - .commitAllowingStateLoss(); - } - - private void initView() { - getSupportFragmentManager().beginTransaction() - .replace(R.id.activity_main, mMainFragment).commit(); - } - - public void gotoFragment(int type) { - switch (type) { - case SHOW_GALLERY: - showFragment(mTestFragment); - break; - case SHOW_PAGER: - showFragment(mViewPagerFragment); - break; - default: - throw new IllegalStateException("unknow type :" + type); - } - } - - -} diff --git a/app/src/main/java/github/hellocsl/gallerylayoutmanager/MainFragment.java b/app/src/main/java/github/hellocsl/gallerylayoutmanager/MainFragment.java deleted file mode 100644 index 345a960b057d3223dd755643dd11d04c36758d8a..0000000000000000000000000000000000000000 --- a/app/src/main/java/github/hellocsl/gallerylayoutmanager/MainFragment.java +++ /dev/null @@ -1,107 +0,0 @@ -package github.hellocsl.gallerylayoutmanager; - -import android.content.Context; -import android.content.Intent; -import android.net.Uri; -import android.os.Bundle; -import android.support.v4.app.FragmentManager; -import android.support.v7.widget.Toolbar; -import android.view.LayoutInflater; -import android.view.MenuItem; -import android.view.View; -import android.view.ViewGroup; -import android.widget.Button; - -import butterknife.BindView; -import butterknife.ButterKnife; -import butterknife.OnClick; -import github.hellocsl.gallerylayoutmanager.base.BaseRestoreFragment; - -import static github.hellocsl.gallerylayoutmanager.MainActivity.SHOW_GALLERY; -import static github.hellocsl.gallerylayoutmanager.MainActivity.SHOW_PAGER; - -/** - * Created by chensuilun on 2017/3/23. - */ - -public class MainFragment extends BaseRestoreFragment implements Toolbar.OnMenuItemClickListener { - @BindView(R.id.toolbar) - Toolbar mToolbar; - @BindView(R.id.main_btn_pager) - Button mMainBtnPager; - @BindView(R.id.main_btn_gallery) - Button mMainBtnGallery; - - - private MainActivity mMainActivity; - - /** - * Generate by live templates. - * Use FragmentManager to find this Fragment's instance by tag - */ - public static MainFragment findFragment(FragmentManager manager) { - return (MainFragment) manager.findFragmentByTag(MainFragment.class.getSimpleName()); - } - - public static MainFragment newInstance() { - Bundle args = new Bundle(); - MainFragment fragment = new MainFragment(); - fragment.setArguments(args); - return fragment; - } - - @Override - public void onAttach(Context context) { - super.onAttach(context); - mMainActivity = (MainActivity) context; - } - - @Override - protected View onCreateContentView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - return inflater.inflate(R.layout.fragment_main, container, false); - } - - @Override - protected void initView(View root, Bundle savedInstanceState) { - ButterKnife.bind(this, root); - mToolbar.inflateMenu(R.menu.base_github); - mToolbar.setOnMenuItemClickListener(this); - } - - - @Override - protected void initData(Bundle savedInstanceState) { - - } - - - @OnClick({R.id.main_btn_pager, R.id.main_btn_gallery}) - public void onClick(View view) { - if (mMainActivity == null) { - return; - } - switch (view.getId()) { - case R.id.main_btn_pager: - mMainActivity.gotoFragment(SHOW_PAGER); - break; - case R.id.main_btn_gallery: - mMainActivity.gotoFragment(SHOW_GALLERY); - break; - } - } - - @Override - public boolean onMenuItemClick(MenuItem item) { - if (item.getItemId() == R.id.menu_github) { - openMyGitHub(); - return true; - } - return false; - } - - private void openMyGitHub() { - Uri uri = Uri.parse("https://github.com/BCsl"); - Intent it = new Intent(Intent.ACTION_VIEW, uri); - startActivity(it); - } -} diff --git a/app/src/main/java/github/hellocsl/gallerylayoutmanager/TestFragment.java b/app/src/main/java/github/hellocsl/gallerylayoutmanager/TestFragment.java deleted file mode 100644 index 8bc06925bacb8510cf6793e5997a65690eecb353..0000000000000000000000000000000000000000 --- a/app/src/main/java/github/hellocsl/gallerylayoutmanager/TestFragment.java +++ /dev/null @@ -1,143 +0,0 @@ -package github.hellocsl.gallerylayoutmanager; - -import android.os.Bundle; -import android.support.v4.app.FragmentManager; -import android.support.v7.widget.RecyclerView; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.Button; -import android.widget.TextView; -import android.widget.Toast; - -import java.util.ArrayList; -import java.util.List; -import java.util.Random; - -import butterknife.BindView; -import butterknife.ButterKnife; -import butterknife.OnClick; -import github.hellocsl.gallerylayoutmanager.adapter.DemoAdapter; -import github.hellocsl.gallerylayoutmanager.base.BaseRestoreFragment; -import github.hellocsl.gallerylayoutmanager.layout.impl.ScaleTransformer; -import github.hellocsl.layoutmanager.gallery.GalleryLayoutManager; - -/** - * Created by chensuilun on 2017/3/22. - */ - -public class TestFragment extends BaseRestoreFragment { - - @BindView(R.id.main_recycle1) - RecyclerView mMainRecycle1; - @BindView(R.id.main_tv_recycle_info_1) - TextView mMainTvRecycleInfo1; - @BindView(R.id.main_recycle2) - RecyclerView mMainRecycle2; - @BindView(R.id.main_tv_recycle_info_2) - TextView mMainTvRecycleInfo2; - @BindView(R.id.main_tv_recycle_info_3) - TextView mMainTvRecycleInfo3; - @BindView(R.id.main_btn_random) - Button mMainBtnRandom; - - public static TestFragment newInstance() { - - Bundle args = new Bundle(); - - TestFragment fragment = new TestFragment(); - fragment.setArguments(args); - return fragment; - } - - - /** - * Generate by live templates. - * Use FragmentManager to find this Fragment's instance by tag - */ - public static TestFragment findFragment(FragmentManager manager) { - return (TestFragment) manager.findFragmentByTag(TestFragment.class.getSimpleName()); - } - - @Override - protected View onCreateContentView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - return inflater.inflate(R.layout.fragment_test, container, false); - } - - @Override - protected void initView(View root, Bundle savedInstanceState) { - ButterKnife.bind(this, root); - final List title = new ArrayList(); - int size = 50; - for (int i = 0; i < size; i++) { - title.add("Hello" + i); - } - GalleryLayoutManager layoutManager1 = new GalleryLayoutManager(GalleryLayoutManager.HORIZONTAL); - layoutManager1.attach(mMainRecycle1, 0); - layoutManager1.setItemTransformer(new ScaleTransformer()); - DemoAdapter demoAdapter1 = new DemoAdapter(title) { - @Override - public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - mMainTvRecycleInfo1.append("Create VH type:+" + viewType + "\n"); - return super.onCreateViewHolder(parent, viewType); - } - }; - demoAdapter1.setOnItemClickListener(new DemoAdapter.OnItemClickListener() { - @Override - public void onItemClick(View view, int position) { - mMainRecycle1.smoothScrollToPosition(position); - } - }); -// DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(getActivity(), DividerItemDecoration.HORIZONTAL); -// mMainRecycle1.addItemDecoration(dividerItemDecoration); - mMainRecycle1.setAdapter(demoAdapter1); - - final GalleryLayoutManager layoutManager2 = new GalleryLayoutManager(GalleryLayoutManager.VERTICAL); - layoutManager2.attach(mMainRecycle2, 20); - layoutManager2.setCallbackInFling(true); - layoutManager2.setOnItemSelectedListener(new GalleryLayoutManager.OnItemSelectedListener() { - @Override - public void onItemSelected(RecyclerView recyclerView, View item, int position) { - mMainTvRecycleInfo2.setText("selected:" + position + "\n"); - } - }); - DemoAdapter demoAdapter2 = new DemoAdapter(title, DemoAdapter.VIEW_TYPE_TEXT); - demoAdapter2.setOnItemClickListener(new DemoAdapter.OnItemClickListener() { - @Override - public void onItemClick(View view, int position) { - mMainRecycle2.smoothScrollToPosition(position); - } - }); - mMainRecycle2.setAdapter(demoAdapter2); - } - - - @Override - protected void initData(Bundle savedInstanceState) { - - } - - private final Random mRandom = new Random(); - - @OnClick({R.id.main_btn_random, R.id.main_btn_data_change}) - public void onClick(View view) { - if (view.getId() == R.id.main_btn_random) { - int selectPosition = mRandom.nextInt(50); - mMainRecycle1.smoothScrollToPosition(selectPosition); - mMainRecycle2.smoothScrollToPosition(selectPosition); - } else { - if (mMainRecycle1.getAdapter() instanceof DemoAdapter) { - int result = ((DemoAdapter) mMainRecycle1.getAdapter()).dataChange(); - if (result == 1) { - Toast.makeText(getContext(), "add data", Toast.LENGTH_SHORT).show(); - } else if (result == -1) { - Toast.makeText(getContext(), "remove data", Toast.LENGTH_SHORT).show(); - } - } - if (mMainRecycle2.getAdapter() instanceof DemoAdapter) { - ((DemoAdapter) mMainRecycle2.getAdapter()).dataChange(); - } - } - } - -} diff --git a/app/src/main/java/github/hellocsl/gallerylayoutmanager/ViewPagerFragment.java b/app/src/main/java/github/hellocsl/gallerylayoutmanager/ViewPagerFragment.java deleted file mode 100644 index 965b101940636a764d54127bb0a779d5d34aa5e9..0000000000000000000000000000000000000000 --- a/app/src/main/java/github/hellocsl/gallerylayoutmanager/ViewPagerFragment.java +++ /dev/null @@ -1,104 +0,0 @@ -package github.hellocsl.gallerylayoutmanager; - -import android.graphics.Bitmap; -import android.os.Bundle; -import android.support.v4.app.FragmentManager; -import android.support.v7.widget.RecyclerView; -import android.util.DisplayMetrics; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; -import android.widget.Toast; - -import java.util.ArrayList; -import java.util.List; - -import butterknife.BindView; -import butterknife.ButterKnife; -import github.hellocsl.gallerylayoutmanager.adapter.ImageCardAdapter; -import github.hellocsl.gallerylayoutmanager.base.BaseRestoreFragment; -import github.hellocsl.gallerylayoutmanager.layout.impl.CurveTransformer; -import github.hellocsl.gallerylayoutmanager.util.BitmapUtils; -import github.hellocsl.gallerylayoutmanager.util.FastBlur; -import github.hellocsl.layoutmanager.gallery.GalleryLayoutManager; - -/** - * Created by chensuilun on 2017/3/22. - */ -public class ViewPagerFragment extends BaseRestoreFragment { - @BindView(R.id.pager_bg) - ImageView mPagerBg; - @BindView(R.id.pager_recycle_view) - FlingRecycleView mPagerRecycleView; - List mResId; - - public static ViewPagerFragment newInstance() { - Bundle args = new Bundle(); - ViewPagerFragment fragment = new ViewPagerFragment(); - fragment.setArguments(args); - return fragment; - } - - /** - * Generate by live templates. - * Use FragmentManager to find this Fragment's instance by tag - */ - public static ViewPagerFragment findFragment(FragmentManager manager) { - return (ViewPagerFragment) manager.findFragmentByTag(ViewPagerFragment.class.getSimpleName()); - } - - List mCardItems; - - { - mResId = new ArrayList(4); - mResId.add(R.drawable.img1); - mResId.add(R.drawable.img2); - mResId.add(R.drawable.img3); - mResId.add(R.drawable.img4); - mCardItems = new ArrayList(50); - ImageCardAdapter.CardItem cardItem; - for (int i = 0; i < 50; i++) { - cardItem = new ImageCardAdapter.CardItem(mResId.get(i % mResId.size()), "item:" + i); - mCardItems.add(cardItem); - } - } - - @Override - protected View onCreateContentView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - return inflater.inflate(R.layout.fragment_view_pager, container, false); - } - - @Override - protected void initView(View root, Bundle savedInstanceState) { - ButterKnife.bind(this, root); - } - - @Override - protected void initData(Bundle savedInstanceState) { - mPagerRecycleView.setFlingAble(false); - GalleryLayoutManager layoutManager = new GalleryLayoutManager(GalleryLayoutManager.HORIZONTAL); - layoutManager.attach(mPagerRecycleView, 30); -// layoutManager.attach(mPagerRecycleView); - layoutManager.setOnItemSelectedListener(new GalleryLayoutManager.OnItemSelectedListener() { - @Override - public void onItemSelected(RecyclerView recyclerView, View item, int position) { - Bitmap bmp = BitmapUtils.decodeSampledBitmapFromResource(getResources(), mResId.get(position % mResId.size()), 100, 100); - mPagerBg.setImageBitmap(FastBlur.doBlur(bmp, 20, false)); - } - }); - layoutManager.setItemTransformer(new CurveTransformer()); - DisplayMetrics displayMetrics = getContext().getResources().getDisplayMetrics(); - ImageCardAdapter imageAdapter = new ImageCardAdapter(mCardItems, (int) (displayMetrics.widthPixels * 0.7f), (int) (displayMetrics.heightPixels * 0.8f)); - imageAdapter.setOnItemClickListener(new ImageCardAdapter.OnItemClickListener() { - @Override - public void onItemClick(View view, int position) { - Toast.makeText(getContext(), "click" + mCardItems.get(position).mName, Toast.LENGTH_SHORT).show(); - mPagerRecycleView.smoothScrollToPosition(position); - } - }); - mPagerRecycleView.setAdapter(imageAdapter); - } - - -} diff --git a/app/src/main/java/github/hellocsl/gallerylayoutmanager/adapter/DemoAdapter.java b/app/src/main/java/github/hellocsl/gallerylayoutmanager/adapter/DemoAdapter.java deleted file mode 100644 index c3859e33336082414b43328dedfc1862cb27569e..0000000000000000000000000000000000000000 --- a/app/src/main/java/github/hellocsl/gallerylayoutmanager/adapter/DemoAdapter.java +++ /dev/null @@ -1,141 +0,0 @@ -package github.hellocsl.gallerylayoutmanager.adapter; - -import android.support.v7.widget.RecyclerView; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import java.util.List; -import java.util.Random; - -import github.hellocsl.gallerylayoutmanager.BuildConfig; -import github.hellocsl.gallerylayoutmanager.R; - - -/** - * Created by chensuilun on 2016/11/15. - */ -public class DemoAdapter extends RecyclerView.Adapter implements View.OnClickListener { - public static final int VIEW_TYPE_IMAGE = 0; - public static final int VIEW_TYPE_TEXT = 1; - private static final String TAG = "DemoAdapter"; - private List mItems; - private int mType = VIEW_TYPE_IMAGE; - private OnItemClickListener mOnItemClickListener; - - - public DemoAdapter(List items) { - this(items, VIEW_TYPE_IMAGE); - } - - public DemoAdapter(List items, int type) { - this.mItems = items; - mType = type; - } - - public void addData() { - if (mItems != null) { - for (int i = 0; i < 10; i++) { - mItems.add("Extra:" + i); - } - notifyDataSetChanged(); - } - } - - private static final Random RANDOM = new Random(); - - public int dataChange() { - int result = 0; - if (mItems != null) { - if (RANDOM.nextBoolean()) { - for (int i = 0; i < 10; i++) { - mItems.add("Extra:" + i); - } - result = 1; - } else { - int size = mItems.size(); - int cut = size / 2; - for (int i = size - 1; i > cut; i--) { - mItems.remove(i); - } - result = -1; - } - notifyDataSetChanged(); - } - return result; - } - - public DemoAdapter setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.mOnItemClickListener = onItemClickListener; - return this; - } - - @Override - public int getItemViewType(int position) { - return mType; - } - - @Override - public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - if (BuildConfig.DEBUG) { - Log.e(TAG, "onCreateViewHolder: type:" + viewType); - } - View v; - if (viewType == VIEW_TYPE_IMAGE) { - v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_recycle_demo, parent, false); - } else { - v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_recycle_tv, parent, false); - } - v.setOnClickListener(this); - return new ViewHolder(v); - } - - @Override - public void onBindViewHolder(ViewHolder holder, int position) { - if (BuildConfig.DEBUG) { - Log.d(TAG, "onBindViewHolder: position:" + position); - } - String item = mItems.get(position); - if (mType == VIEW_TYPE_TEXT) { - holder.text.setText(item); - } else { - holder.text.setText("HelloWorld:" + item); - } - holder.itemView.setTag(position); - } - - @Override - public int getItemCount() { - return mItems.size(); - } - - @Override - public void onClick(final View v) { - if (mOnItemClickListener != null) { - mOnItemClickListener.onItemClick(v, (int) v.getTag()); - } - } - - /** - * @author chensuilun - */ - protected static class ViewHolder extends RecyclerView.ViewHolder { - public TextView text; - - public ViewHolder(View itemView) { - super(itemView); - text = (TextView) itemView.findViewById(R.id.item_tv_title); - } - } - - /** - * @author chensuilun - */ - public interface OnItemClickListener { - - void onItemClick(View view, int position); - - } -} diff --git a/app/src/main/java/github/hellocsl/gallerylayoutmanager/adapter/ImageCardAdapter.java b/app/src/main/java/github/hellocsl/gallerylayoutmanager/adapter/ImageCardAdapter.java deleted file mode 100644 index 93003792abed48fd8275565b58e67f978224a0b0..0000000000000000000000000000000000000000 --- a/app/src/main/java/github/hellocsl/gallerylayoutmanager/adapter/ImageCardAdapter.java +++ /dev/null @@ -1,105 +0,0 @@ -package github.hellocsl.gallerylayoutmanager.adapter; - -import android.support.v7.widget.RecyclerView; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; - -import java.util.List; - -import github.hellocsl.gallerylayoutmanager.BuildConfig; -import github.hellocsl.gallerylayoutmanager.R; - - -/** - * Created by chensuilun on 2016/11/15. - */ -public class ImageCardAdapter extends RecyclerView.Adapter implements View.OnClickListener { - private static final String TAG = "ImageCardAdapter"; - private List items; - private OnItemClickListener mOnItemClickListener; - private int mWidth; - private int mHeight; - - public ImageCardAdapter(List items, int width, int height) { - this.items = items; - mWidth = width; - mHeight = height; - } - - public ImageCardAdapter setOnItemClickListener(OnItemClickListener onItemClickListener) { - this.mOnItemClickListener = onItemClickListener; - return this; - } - - - @Override - public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - if (BuildConfig.DEBUG) { - Log.e(TAG, "onCreateViewHolder: type:" + viewType); - } - View v; - v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_recycel_image, parent, false); - v.setOnClickListener(this); - v.setLayoutParams(new RecyclerView.LayoutParams(mWidth, mHeight)); - return new ViewHolder(v); - } - - @Override - public void onBindViewHolder(ViewHolder holder, int position) { - if (BuildConfig.DEBUG) { - Log.d(TAG, "onBindViewHolder: position:" + position); - } - CardItem item = items.get(position); - holder.image.setImageResource(item.mResId); - holder.itemView.setTag(position); - } - - @Override - public int getItemCount() { - return items.size(); - } - - @Override - public void onClick(final View v) { - if (mOnItemClickListener != null) { - mOnItemClickListener.onItemClick(v, (int) v.getTag()); - } - } - - /** - * @author chensuilun - */ - protected static class ViewHolder extends RecyclerView.ViewHolder { - public ImageView image; - - public ViewHolder(View itemView) { - super(itemView); - image = (ImageView) itemView.findViewById(R.id.imageView); - } - } - - /** - * @author chensuilun - */ - public interface OnItemClickListener { - - void onItemClick(View view, int position); - - } - - /** - * - */ - public static class CardItem { - public int mResId; - public String mName; - - public CardItem(int resId, String name) { - mResId = resId; - mName = name; - } - } -} diff --git a/app/src/main/java/github/hellocsl/gallerylayoutmanager/base/BaseRestoreFragment.java b/app/src/main/java/github/hellocsl/gallerylayoutmanager/base/BaseRestoreFragment.java deleted file mode 100644 index f909991c2d35b2169ffcb2d3984ff6c2816f8702..0000000000000000000000000000000000000000 --- a/app/src/main/java/github/hellocsl/gallerylayoutmanager/base/BaseRestoreFragment.java +++ /dev/null @@ -1,101 +0,0 @@ -package github.hellocsl.gallerylayoutmanager.base; - -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentTransaction; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import github.hellocsl.gallerylayoutmanager.BuildConfig; - - -/** - * Created by chensuilun on 16-8-9. - */ -public abstract class BaseRestoreFragment extends Fragment { - public static final String IS_SHOW = "is_show"; - protected View mRootView; - - @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - if (BuildConfig.DEBUG) { - Log.d(getClass().getSimpleName(), "onCreate:"); - } - if (savedInstanceState != null && getFragmentManager() != null) { - boolean isShow = savedInstanceState.getBoolean(IS_SHOW, true); - FragmentTransaction ft = getFragmentManager().beginTransaction(); - if (BuildConfig.DEBUG) { - Log.d(this.getClass().getSimpleName(), "restore show:" + isShow); - } - if (!isShow) { - ft.hide(this); - } else { - ft.show(this); - } - ft.commit(); - } - } - - @Override - public void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - outState.putBoolean(IS_SHOW, !isHidden()); - } - - @Nullable - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - if (BuildConfig.DEBUG) { - Log.d(getClass().getSimpleName(), "onCreateView:"); - } - mRootView = onCreateContentView(inflater, container, savedInstanceState); - return mRootView; - } - - - @Override - public void onViewCreated(View view, Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - if (BuildConfig.DEBUG) { - Log.v(getClass().getSimpleName(), "onViewCreated: "); - } - initView(view, savedInstanceState); - initData(savedInstanceState); - } - - @Override - public void onStop() { - super.onStop(); - if (BuildConfig.DEBUG) { - Log.d(getClass().getSimpleName(), "onStop: "); - } - } - - @Override - public void onDestroyView() { - super.onDestroyView(); - if (BuildConfig.DEBUG) { - Log.d(getClass().getSimpleName(), "onDestroyView "); - } - } - - @Override - public void onDestroy() { - super.onDestroy(); - if (BuildConfig.DEBUG) { - Log.d(getClass().getSimpleName(), "onDestroy: "); - } - } - - protected abstract View onCreateContentView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState); - - protected abstract void initView(View root, Bundle savedInstanceState); - - protected abstract void initData(Bundle savedInstanceState); - - -} diff --git a/app/src/main/java/github/hellocsl/gallerylayoutmanager/layout/impl/CurveTransformer.java b/app/src/main/java/github/hellocsl/gallerylayoutmanager/layout/impl/CurveTransformer.java deleted file mode 100644 index b89c24023eea39e6878c17b5d1dfa14d8218cfd7..0000000000000000000000000000000000000000 --- a/app/src/main/java/github/hellocsl/gallerylayoutmanager/layout/impl/CurveTransformer.java +++ /dev/null @@ -1,35 +0,0 @@ -package github.hellocsl.gallerylayoutmanager.layout.impl; - -import android.view.View; - -import github.hellocsl.layoutmanager.gallery.GalleryLayoutManager; - -/** - * Created by chensuilun on 2016/12/16. - */ -public class CurveTransformer implements GalleryLayoutManager.ItemTransformer { - public static final int ROTATE_ANGEL = 7; - private static final String TAG = "CurveTransformer"; - - - @Override - public void transformItem(GalleryLayoutManager layoutManager, View item, float fraction) { - if (layoutManager.getOrientation() == GalleryLayoutManager.VERTICAL) { - return; - } - int width = item.getWidth(); - int height = item.getHeight(); - item.setPivotX(width / 2.f); - item.setPivotY(height); - float scale = 1 - 0.1f * Math.abs(fraction); - item.setScaleX(scale); - item.setScaleY(scale); - item.setRotation(ROTATE_ANGEL * fraction); - item.setTranslationY((float) (Math.sin(2 * Math.PI * ROTATE_ANGEL * Math.abs(fraction) / 360.f) * width / 2.0f)); - item.setTranslationX((float) ((1 - scale) * width / 2.0f / Math.cos(2 * Math.PI * ROTATE_ANGEL * fraction / 360.f))); - if (fraction > 0) { - item.setTranslationX(-item.getTranslationX()); - } - item.setAlpha(1 - 0.2f * Math.abs(fraction)); - } -} diff --git a/app/src/main/java/github/hellocsl/gallerylayoutmanager/layout/impl/ScaleTransformer.java b/app/src/main/java/github/hellocsl/gallerylayoutmanager/layout/impl/ScaleTransformer.java deleted file mode 100644 index 3128cb45270289240d2f38cc6263a97331b2012e..0000000000000000000000000000000000000000 --- a/app/src/main/java/github/hellocsl/gallerylayoutmanager/layout/impl/ScaleTransformer.java +++ /dev/null @@ -1,23 +0,0 @@ -package github.hellocsl.gallerylayoutmanager.layout.impl; - -import android.view.View; - -import github.hellocsl.layoutmanager.gallery.GalleryLayoutManager; - -/** - * Created by chensuilun on 2016/12/16. - */ -public class ScaleTransformer implements GalleryLayoutManager.ItemTransformer { - - private static final String TAG = "CurveTransformer"; - - - @Override - public void transformItem(GalleryLayoutManager layoutManager, View item, float fraction) { - item.setPivotX(item.getWidth() / 2.f); - item.setPivotY(item.getHeight()/2.0f); - float scale = 1 - 0.2f * Math.abs(fraction); - item.setScaleX(scale); - item.setScaleY(scale); - } -} diff --git a/app/src/main/java/github/hellocsl/gallerylayoutmanager/util/BitmapUtils.java b/app/src/main/java/github/hellocsl/gallerylayoutmanager/util/BitmapUtils.java deleted file mode 100644 index 2657e2124a5dc9becc46df23212018f3e38791c3..0000000000000000000000000000000000000000 --- a/app/src/main/java/github/hellocsl/gallerylayoutmanager/util/BitmapUtils.java +++ /dev/null @@ -1,90 +0,0 @@ -package github.hellocsl.gallerylayoutmanager.util; - -import android.content.res.Resources; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; - -/** - * Created by chensuilun on 2017/3/22. - */ - -public class BitmapUtils { - private static int sDesiredWidth; - - private static int sDesiredHeight; - - public static Bitmap decodeSampledBitmapFromResource(Resources res, int resId, int reqWidth, int reqHeight) { - BitmapFactory.Options options = new BitmapFactory.Options(); - options.inJustDecodeBounds = true; - BitmapFactory.decodeResource(res, resId, options); - options = getBestOptions(options, reqWidth, reqHeight); - Bitmap src = BitmapFactory.decodeResource(res, resId, options); - return createScaleBitmap(src, sDesiredWidth, sDesiredHeight); - } - - private static Bitmap createScaleBitmap(Bitmap tempBitmap, int desiredWidth, int desiredHeight) { - // If necessary, scale down to the maximal acceptable size. - if (tempBitmap != null && (tempBitmap.getWidth() > desiredWidth || tempBitmap.getHeight() > desiredHeight)) { - Bitmap bitmap = Bitmap.createScaledBitmap(tempBitmap, desiredWidth, desiredHeight, true); - tempBitmap.recycle(); - return bitmap; - } else { - return tempBitmap; - } - } - - private static BitmapFactory.Options getBestOptions(BitmapFactory.Options options, int reqWidth, int reqHeight) { - int actualWidth = options.outWidth; - int actualHeight = options.outHeight; - // Then compute the dimensions we would ideally like to decode to. - sDesiredWidth = getResizedDimension(reqWidth, reqHeight, actualWidth, actualHeight); - sDesiredHeight = getResizedDimension(reqHeight, reqWidth, actualHeight, actualWidth); - // 根据现在得到计算inSampleSize - options.inSampleSize = calculateBestInSampleSize(actualWidth, actualHeight, sDesiredWidth, sDesiredHeight); - // 使用获取到的inSampleSize值再次解析图片 - options.inJustDecodeBounds = false; - return options; - } - - /** - * Returns the largest power-of-two divisor for use in downscaling a bitmap - * that will not result in the scaling past the desired dimensions. - * - * @param actualWidth Actual width of the bitmap - * @param actualHeight Actual height of the bitmap - * @param desiredWidth Desired width of the bitmap - * @param desiredHeight Desired height of the bitmap - */ - // Visible for testing. - private static int calculateBestInSampleSize(int actualWidth, int actualHeight, int desiredWidth, int desiredHeight) { - double wr = (double) actualWidth / desiredWidth; - double hr = (double) actualHeight / desiredHeight; - double ratio = Math.min(wr, hr); - float inSampleSize = 1.0f; - while ((inSampleSize * 2) <= ratio) { - inSampleSize *= 2; - } - - return (int) inSampleSize; - } - - /** - * Scales one side of a rectangle to fit aspect ratio. - * - * @param maxPrimary Maximum size of the primary dimension (i.e. width for max - * width), or zero to maintain aspect ratio with secondary - * dimension - * @param maxSecondary Maximum size of the secondary dimension, or zero to maintain - * aspect ratio with primary dimension - * @param actualPrimary Actual size of the primary dimension - * @param actualSecondary Actual size of the secondary dimension - */ - private static int getResizedDimension(int maxPrimary, int maxSecondary, int actualPrimary, int actualSecondary) { - double ratio = (double) actualSecondary / (double) actualPrimary; - int resized = maxPrimary; - if (resized * ratio > maxSecondary) { - resized = (int) (maxSecondary / ratio); - } - return resized; - } -} diff --git a/app/src/main/java/github/hellocsl/gallerylayoutmanager/util/FastBlur.java b/app/src/main/java/github/hellocsl/gallerylayoutmanager/util/FastBlur.java deleted file mode 100644 index 82946620913c5d33f4d9ff3ad5af01ff8e8bb167..0000000000000000000000000000000000000000 --- a/app/src/main/java/github/hellocsl/gallerylayoutmanager/util/FastBlur.java +++ /dev/null @@ -1,258 +0,0 @@ -package github.hellocsl.gallerylayoutmanager.util; - -import android.graphics.Bitmap; -import android.graphics.drawable.BitmapDrawable; - -import java.lang.ref.SoftReference; - -/** - * 2016年2月19日 - */ -//CHECKSTYLE:OFF -public class FastBlur { - - private static SoftReference sCached; - - public static BitmapDrawable getCachedBD() { - return sCached != null ? sCached.get() : null; - } - - public static void cacheBD(BitmapDrawable bd) { - sCached = new SoftReference(bd); - } - - public static Bitmap doBlur(Bitmap sentBitmap, int radius, boolean canReuseInBitmap) { - - // Stack Blur v1.0 from - // http://www.quasimondo.com/StackBlurForCanvas/StackBlurDemo.html - // - // Java Author: Mario Klingemann - // http://incubator.quasimondo.com - // created Feburary 29, 2004 - // Android port : Yahel Bouaziz - // http://www.kayenko.com - // ported april 5th, 2012 - - // This is a compromise between Gaussian Blur and Box blur - // It creates much better looking blurs than Box Blur, but is - // 7x faster than my Gaussian Blur implementation. - // - // I called it Stack Blur because this describes best how this - // filter works internally: it creates a kind of moving stack - // of colors whilst scanning through the image. Thereby it - // just has to add one new block of color to the right side - // of the stack and remove the leftmost color. The remaining - // colors on the topmost layer of the stack are either added on - // or reduced by one, depending on if they are on the right or - // on the left side of the stack. - // - // If you are using this algorithm in your code please add - // the following line: - // - // Stack Blur Algorithm by Mario Klingemann - - Bitmap bitmap; - if (canReuseInBitmap) { - bitmap = sentBitmap; - } else { - bitmap = sentBitmap.copy(sentBitmap.getConfig(), true); - } - - if (radius < 1) { - return (null); - } - - int w = bitmap.getWidth(); - int h = bitmap.getHeight(); - - int[] pix = new int[w * h]; - bitmap.getPixels(pix, 0, w, 0, 0, w, h); - - int wm = w - 1; - int hm = h - 1; - int wh = w * h; - int div = radius + radius + 1; - - int r[] = new int[wh]; - int g[] = new int[wh]; - int b[] = new int[wh]; - int rsum, gsum, bsum, x, y, i, p, yp, yi, yw; - int vmin[] = new int[Math.max(w, h)]; - - int divsum = (div + 1) >> 1; - divsum *= divsum; - int dv[] = new int[256 * divsum]; - for (i = 0; i < 256 * divsum; i++) { - dv[i] = (i / divsum); - } - - yw = yi = 0; - - int[][] stack = new int[div][3]; - int stackpointer; - int stackstart; - int[] sir; - int rbs; - int r1 = radius + 1; - int routsum, goutsum, boutsum; - int rinsum, ginsum, binsum; - - for (y = 0; y < h; y++) { - rinsum = ginsum = binsum = routsum = goutsum = boutsum = rsum = gsum = bsum = 0; - for (i = -radius; i <= radius; i++) { - p = pix[yi + Math.min(wm, Math.max(i, 0))]; - sir = stack[i + radius]; - sir[0] = (p & 0xff0000) >> 16; - sir[1] = (p & 0x00ff00) >> 8; - sir[2] = (p & 0x0000ff); - rbs = r1 - Math.abs(i); - rsum += sir[0] * rbs; - gsum += sir[1] * rbs; - bsum += sir[2] * rbs; - if (i > 0) { - rinsum += sir[0]; - ginsum += sir[1]; - binsum += sir[2]; - } else { - routsum += sir[0]; - goutsum += sir[1]; - boutsum += sir[2]; - } - } - stackpointer = radius; - - for (x = 0; x < w; x++) { - - r[yi] = dv[rsum]; - g[yi] = dv[gsum]; - b[yi] = dv[bsum]; - - rsum -= routsum; - gsum -= goutsum; - bsum -= boutsum; - - stackstart = stackpointer - radius + div; - sir = stack[stackstart % div]; - - routsum -= sir[0]; - goutsum -= sir[1]; - boutsum -= sir[2]; - - if (y == 0) { - vmin[x] = Math.min(x + radius + 1, wm); - } - p = pix[yw + vmin[x]]; - - sir[0] = (p & 0xff0000) >> 16; - sir[1] = (p & 0x00ff00) >> 8; - sir[2] = (p & 0x0000ff); - - rinsum += sir[0]; - ginsum += sir[1]; - binsum += sir[2]; - - rsum += rinsum; - gsum += ginsum; - bsum += binsum; - - stackpointer = (stackpointer + 1) % div; - sir = stack[(stackpointer) % div]; - - routsum += sir[0]; - goutsum += sir[1]; - boutsum += sir[2]; - - rinsum -= sir[0]; - ginsum -= sir[1]; - binsum -= sir[2]; - - yi++; - } - yw += w; - } - for (x = 0; x < w; x++) { - rinsum = ginsum = binsum = routsum = goutsum = boutsum = rsum = gsum = bsum = 0; - yp = -radius * w; - for (i = -radius; i <= radius; i++) { - yi = Math.max(0, yp) + x; - - sir = stack[i + radius]; - - sir[0] = r[yi]; - sir[1] = g[yi]; - sir[2] = b[yi]; - - rbs = r1 - Math.abs(i); - - rsum += r[yi] * rbs; - gsum += g[yi] * rbs; - bsum += b[yi] * rbs; - - if (i > 0) { - rinsum += sir[0]; - ginsum += sir[1]; - binsum += sir[2]; - } else { - routsum += sir[0]; - goutsum += sir[1]; - boutsum += sir[2]; - } - - if (i < hm) { - yp += w; - } - } - yi = x; - stackpointer = radius; - for (y = 0; y < h; y++) { - // Preserve alpha channel: ( 0xff000000 & pix[yi] ) - pix[yi] = (0xff000000 & pix[yi]) | (dv[rsum] << 16) | (dv[gsum] << 8) | dv[bsum]; - - rsum -= routsum; - gsum -= goutsum; - bsum -= boutsum; - - stackstart = stackpointer - radius + div; - sir = stack[stackstart % div]; - - routsum -= sir[0]; - goutsum -= sir[1]; - boutsum -= sir[2]; - - if (x == 0) { - vmin[y] = Math.min(y + r1, hm) * w; - } - p = x + vmin[y]; - - sir[0] = r[p]; - sir[1] = g[p]; - sir[2] = b[p]; - - rinsum += sir[0]; - ginsum += sir[1]; - binsum += sir[2]; - - rsum += rinsum; - gsum += ginsum; - bsum += binsum; - - stackpointer = (stackpointer + 1) % div; - sir = stack[stackpointer]; - - routsum += sir[0]; - goutsum += sir[1]; - boutsum += sir[2]; - - rinsum -= sir[0]; - ginsum -= sir[1]; - binsum -= sir[2]; - - yi += w; - } - } - - bitmap.setPixels(pix, 0, w, 0, 0, w, h); - - return (bitmap); - } -} \ No newline at end of file diff --git a/app/src/main/java/github/hellocsl/gallerylayoutmanager/util/StatusBarCompat.java b/app/src/main/java/github/hellocsl/gallerylayoutmanager/util/StatusBarCompat.java deleted file mode 100644 index 826cde48942298ec978d45a0a7b6afa4277bdff2..0000000000000000000000000000000000000000 --- a/app/src/main/java/github/hellocsl/gallerylayoutmanager/util/StatusBarCompat.java +++ /dev/null @@ -1,203 +0,0 @@ -package github.hellocsl.gallerylayoutmanager.util; - -import android.app.Activity; -import android.content.Context; -import android.graphics.Color; -import android.os.Build; -import android.support.v4.view.ViewCompat; -import android.view.Gravity; -import android.view.View; -import android.view.ViewGroup; -import android.view.Window; -import android.view.WindowManager; -import android.widget.FrameLayout; - -/** - * Created by chensuilun on 16-7-12. - */ -public class StatusBarCompat { - - private static final int COLOR_TRANSLUCENT = Color.parseColor("#00000000"); - - public static final int DEFAULT_COLOR_ALPHA = 112; - - /** - * set statusBarColor - * @param statusColor color - * @param alpha 0 - 255 - */ - public static void setStatusBarColor(Activity activity, int statusColor, int alpha) { - setStatusBarColor(activity, calculateStatusBarColor(statusColor, alpha)); - } - - public static void setStatusBarColor(Activity activity, int statusColor) { - Window window = activity.getWindow(); - ViewGroup mContentView = (ViewGroup) activity.findViewById(Window.ID_ANDROID_CONTENT); - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - //First translucent status bar. - window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - //After LOLLIPOP not translucent status bar - window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); - //Then call setStatusBarColor. - window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); - window.setStatusBarColor(statusColor); - //set child View not fill the system window - View mChildView = mContentView.getChildAt(0); - if (mChildView != null) { - ViewCompat.setFitsSystemWindows(mChildView, true); - } - } else { - ViewGroup mDecorView = (ViewGroup) window.getDecorView(); - if (mDecorView.getTag() != null && mDecorView.getTag() instanceof Boolean && (Boolean) mDecorView.getTag()) { - //if has add fake status bar view - View mStatusBarView = mDecorView.getChildAt(0); - if (mStatusBarView != null) { - mStatusBarView.setBackgroundColor(statusColor); - } - } else { - int statusBarHeight = getStatusBarHeight(activity); - //add margin - View mContentChild = mContentView.getChildAt(0); - if (mContentChild != null) { - ViewCompat.setFitsSystemWindows(mContentChild, false); - FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) mContentChild.getLayoutParams(); - lp.topMargin += statusBarHeight; - mContentChild.setLayoutParams(lp); - } - //add fake status bar view - View mStatusBarView = new View(activity); - FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight); - layoutParams.gravity = Gravity.TOP; - mStatusBarView.setLayoutParams(layoutParams); - mStatusBarView.setBackgroundColor(statusColor); - mDecorView.addView(mStatusBarView, 0); - mDecorView.setTag(true); - } - } - } - } - - public static void translucentStatusBar(Activity activity) { - translucentStatusBar(activity, false); - } - - /** - * change to full screen mode - * @param hideStatusBarBackground hide status bar alpha Background when SDK > 21, true if hide it - */ - public static void translucentStatusBar(Activity activity, boolean hideStatusBarBackground) { - Window window = activity.getWindow(); - ViewGroup mContentView = (ViewGroup) activity.findViewById(Window.ID_ANDROID_CONTENT); - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - int statusBarHeight = getStatusBarHeight(activity); - - //First translucent status bar. - window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); - - //set child View not fill the system window - View mChildView = mContentView.getChildAt(0); - if (mChildView != null) { - ViewCompat.setFitsSystemWindows(mChildView, false); - //must call requestApplyInsets, otherwise it will have space in screen bottom - ViewCompat.requestApplyInsets(mChildView); - } - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - //After LOLLIPOP just set LayoutParams. - window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); - if (hideStatusBarBackground) { - window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); - window.setStatusBarColor(COLOR_TRANSLUCENT); - } else { - window.setStatusBarColor(calculateStatusBarColor(COLOR_TRANSLUCENT, DEFAULT_COLOR_ALPHA)); - } - } else { - ViewGroup mDecorView = (ViewGroup) window.getDecorView(); - if (mDecorView.getTag() != null && mDecorView.getTag() instanceof Boolean && (Boolean) mDecorView.getTag()) { - mChildView = mDecorView.getChildAt(0); - //remove fake status bar view. - mDecorView.removeView(mChildView); - mChildView = mContentView.getChildAt(0); - if (mChildView != null) { - FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) mChildView.getLayoutParams(); - //cancel the margin top - if (lp != null && lp.topMargin >= statusBarHeight) { - lp.topMargin -= statusBarHeight; - mChildView.setLayoutParams(lp); - } - } - mDecorView.setTag(false); - } - } - } - } - - /** - * 第一种方式可能存在bug - * @param activity - */ - public static void translucentStatusBar2(Activity activity) { - Window window = activity.getWindow(); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); - window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN //控制状态栏在屏幕上层,不占据屏幕布局空间 - | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); //保持整个View稳定,使View不会因为SystemUI的变化而做layou - window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); - window.setStatusBarColor(Color.TRANSPARENT); - } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE - | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN - | View.SYSTEM_UI_FLAG_IMMERSIVE); - window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); - } - } - - /** - * 全屏布局模式,透明状态栏和导航栏 - * @param activity - */ - public static void layoutFullScreen(Activity activity) { - Window window = activity.getWindow(); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); - window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); - window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN //控制状态栏在屏幕上层,不占据屏幕布局空间 - | View.SYSTEM_UI_FLAG_LAYOUT_STABLE //保持整个View稳定,使View不会因为SystemUI的变化而做layou - | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION); //控制导航栏浮在屏幕上层,不占据屏幕布局空间 - window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); - window.setStatusBarColor(Color.TRANSPARENT); - window.setNavigationBarColor(Color.TRANSPARENT); - } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE - | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN - | View.SYSTEM_UI_FLAG_IMMERSIVE); - window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); - window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); - } - } - - //Get status bar height - public static int getStatusBarHeight(Context context) { - int result = 0; - int resId = context.getResources().getIdentifier("status_bar_height", "dimen", "android"); - if (resId > 0) { - result = context.getResources().getDimensionPixelOffset(resId); - } - return result; - } - - //Get alpha color - private static int calculateStatusBarColor(int color, int alpha) { - float a = 1 - alpha / 255f; - int red = color >> 16 & 0xff; - int green = color >> 8 & 0xff; - int blue = color & 0xff; - red = (int) (red * a + 0.5); - green = (int) (green * a + 0.5); - blue = (int) (blue * a + 0.5); - return 0xff << 24 | red << 16 | green << 8 | blue; - } -} diff --git a/app/src/main/res/color/color_item_check.xml b/app/src/main/res/color/color_item_check.xml deleted file mode 100644 index 9d1dc8aba954bfd3044b02ff9e8ba15ab1bf8b5c..0000000000000000000000000000000000000000 --- a/app/src/main/res/color/color_item_check.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml deleted file mode 100644 index c95bc453a45094ba547bb66e934718486793f67d..0000000000000000000000000000000000000000 --- a/app/src/main/res/layout/activity_main.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - diff --git a/app/src/main/res/layout/app_toolbar.xml b/app/src/main/res/layout/app_toolbar.xml deleted file mode 100644 index c7809e2732a20cf2e82b13b975f3d320009b39f8..0000000000000000000000000000000000000000 --- a/app/src/main/res/layout/app_toolbar.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_main.xml b/app/src/main/res/layout/fragment_main.xml deleted file mode 100644 index 02bd4430c132183de9b5e31ddd56933c1c12fc67..0000000000000000000000000000000000000000 --- a/app/src/main/res/layout/fragment_main.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - -