forked from tome34/frameDemoMo2
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
1,优化mvp模式
- Loading branch information
Showing
196 changed files
with
4,328 additions
and
2,031 deletions.
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
/build |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
apply plugin: 'com.android.library' | ||
//apply plugin: 'com.novoda.bintray-release' | ||
|
||
android { | ||
compileSdkVersion rootProject.ext.android.compileSdkVersion | ||
buildToolsVersion rootProject.ext.android.buildToolsVersion | ||
|
||
defaultConfig { | ||
minSdkVersion rootProject.ext.android.minSdkVersion | ||
targetSdkVersion rootProject.ext.android.targetSdkVersion | ||
versionCode rootProject.ext.android.versionCode | ||
versionName rootProject.ext.android.versionName | ||
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" | ||
} | ||
buildTypes { | ||
release { | ||
minifyEnabled false | ||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' | ||
} | ||
} | ||
} | ||
|
||
dependencies { | ||
implementation fileTree(include: ['*.jar'], dir: 'libs') | ||
implementation rootProject.ext.dependencies["support-v4"] | ||
} | ||
|
||
//publish { | ||
// userOrg = 'hongyangandroid'//bintray.com用户名 | ||
// groupId = 'com.hyman'//jcenter上的路径 | ||
// artifactId = 'flowlayout-lib'//项目名称 | ||
// publishVersion = '1.1.2'//版本号 | ||
// desc = 'save time' | ||
// website = 'https://github.com/hongyangAndroid/FlowLayout' | ||
//} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
# Add project specific ProGuard rules here. | ||
# By default, the flags in this file are appended to flags specified | ||
# in /Users/zhy/android/sdk/android-sdk-macosx/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 *; | ||
#} |
15 changes: 15 additions & 0 deletions
15
baseLib/flowlayout-lib/src/androidTest/java/com/zhy/flowlayout_lib/ApplicationTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
package com.zhy.flowlayout_lib; | ||
|
||
import android.app.Application; | ||
import android.test.ApplicationTestCase; | ||
|
||
/** | ||
* <a href="http://d.android.com/tools/testing/testing_android.html">Testing Fundamentals</a> | ||
*/ | ||
public class ApplicationTest extends ApplicationTestCase<Application> | ||
{ | ||
public ApplicationTest() | ||
{ | ||
super(Application.class); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
<manifest package="com.zhy.view.flowlayout" | ||
> | ||
|
||
|
||
|
||
</manifest> |
215 changes: 215 additions & 0 deletions
215
baseLib/flowlayout-lib/src/main/java/com/zhy/view/flowlayout/FlowLayout.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,215 @@ | ||
package com.zhy.view.flowlayout; | ||
|
||
import android.content.Context; | ||
import android.content.res.TypedArray; | ||
import android.util.AttributeSet; | ||
import android.util.LayoutDirection; | ||
import android.view.View; | ||
import android.view.ViewGroup; | ||
import android.support.v4.text.TextUtilsCompat; | ||
|
||
import java.util.ArrayList; | ||
import java.util.Collections; | ||
import java.util.List; | ||
import java.util.Locale; | ||
|
||
public class FlowLayout extends ViewGroup { | ||
private static final String TAG = "FlowLayout"; | ||
private static final int LEFT = -1; | ||
private static final int CENTER = 0; | ||
private static final int RIGHT = 1; | ||
|
||
protected List<List<View>> mAllViews = new ArrayList<List<View>>(); | ||
protected List<Integer> mLineHeight = new ArrayList<Integer>(); | ||
protected List<Integer> mLineWidth = new ArrayList<Integer>(); | ||
private int mGravity; | ||
private List<View> lineViews = new ArrayList<>(); | ||
|
||
public FlowLayout(Context context, AttributeSet attrs, int defStyle) { | ||
super(context, attrs, defStyle); | ||
TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.TagFlowLayout); | ||
mGravity = ta.getInt(R.styleable.TagFlowLayout_tag_gravity, LEFT); | ||
int layoutDirection = TextUtilsCompat.getLayoutDirectionFromLocale(Locale.getDefault()); | ||
if (layoutDirection == LayoutDirection.RTL) { | ||
if (mGravity == LEFT) { | ||
mGravity = RIGHT; | ||
} else { | ||
mGravity = LEFT; | ||
} | ||
} | ||
ta.recycle(); | ||
} | ||
|
||
public FlowLayout(Context context, AttributeSet attrs) { | ||
this(context, attrs, 0); | ||
} | ||
|
||
public FlowLayout(Context context) { | ||
this(context, null); | ||
} | ||
|
||
@Override | ||
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { | ||
int sizeWidth = MeasureSpec.getSize(widthMeasureSpec); | ||
int modeWidth = MeasureSpec.getMode(widthMeasureSpec); | ||
int sizeHeight = MeasureSpec.getSize(heightMeasureSpec); | ||
int modeHeight = MeasureSpec.getMode(heightMeasureSpec); | ||
|
||
// wrap_content | ||
int width = 0; | ||
int height = 0; | ||
|
||
int lineWidth = 0; | ||
int lineHeight = 0; | ||
|
||
int cCount = getChildCount(); | ||
|
||
for (int i = 0; i < cCount; i++) { | ||
View child = getChildAt(i); | ||
if (child.getVisibility() == View.GONE) { | ||
if (i == cCount - 1) { | ||
width = Math.max(lineWidth, width); | ||
height += lineHeight; | ||
} | ||
continue; | ||
} | ||
measureChild(child, widthMeasureSpec, heightMeasureSpec); | ||
MarginLayoutParams lp = (MarginLayoutParams) child | ||
.getLayoutParams(); | ||
|
||
int childWidth = child.getMeasuredWidth() + lp.leftMargin | ||
+ lp.rightMargin; | ||
int childHeight = child.getMeasuredHeight() + lp.topMargin | ||
+ lp.bottomMargin; | ||
|
||
if (lineWidth + childWidth > sizeWidth - getPaddingLeft() - getPaddingRight()) { | ||
width = Math.max(width, lineWidth); | ||
lineWidth = childWidth; | ||
height += lineHeight; | ||
lineHeight = childHeight; | ||
} else { | ||
lineWidth += childWidth; | ||
lineHeight = Math.max(lineHeight, childHeight); | ||
} | ||
if (i == cCount - 1) { | ||
width = Math.max(lineWidth, width); | ||
height += lineHeight; | ||
} | ||
} | ||
setMeasuredDimension( | ||
// | ||
modeWidth == MeasureSpec.EXACTLY ? sizeWidth : width + getPaddingLeft() + getPaddingRight(), | ||
modeHeight == MeasureSpec.EXACTLY ? sizeHeight : height + getPaddingTop() + getPaddingBottom()// | ||
); | ||
|
||
} | ||
|
||
|
||
@Override | ||
protected void onLayout(boolean changed, int l, int t, int r, int b) { | ||
mAllViews.clear(); | ||
mLineHeight.clear(); | ||
mLineWidth.clear(); | ||
lineViews.clear(); | ||
|
||
int width = getWidth(); | ||
|
||
int lineWidth = 0; | ||
int lineHeight = 0; | ||
|
||
int cCount = getChildCount(); | ||
|
||
for (int i = 0; i < cCount; i++) { | ||
View child = getChildAt(i); | ||
if (child.getVisibility() == View.GONE) continue; | ||
MarginLayoutParams lp = (MarginLayoutParams) child | ||
.getLayoutParams(); | ||
|
||
int childWidth = child.getMeasuredWidth(); | ||
int childHeight = child.getMeasuredHeight(); | ||
|
||
if (childWidth + lineWidth + lp.leftMargin + lp.rightMargin > width - getPaddingLeft() - getPaddingRight()) { | ||
mLineHeight.add(lineHeight); | ||
mAllViews.add(lineViews); | ||
mLineWidth.add(lineWidth); | ||
|
||
lineWidth = 0; | ||
lineHeight = childHeight + lp.topMargin + lp.bottomMargin; | ||
lineViews = new ArrayList<View>(); | ||
} | ||
lineWidth += childWidth + lp.leftMargin + lp.rightMargin; | ||
lineHeight = Math.max(lineHeight, childHeight + lp.topMargin | ||
+ lp.bottomMargin); | ||
lineViews.add(child); | ||
|
||
} | ||
mLineHeight.add(lineHeight); | ||
mLineWidth.add(lineWidth); | ||
mAllViews.add(lineViews); | ||
|
||
|
||
int left = getPaddingLeft(); | ||
int top = getPaddingTop(); | ||
|
||
int lineNum = mAllViews.size(); | ||
|
||
for (int i = 0; i < lineNum; i++) { | ||
lineViews = mAllViews.get(i); | ||
lineHeight = mLineHeight.get(i); | ||
|
||
// set gravity | ||
int currentLineWidth = this.mLineWidth.get(i); | ||
switch (this.mGravity) { | ||
case LEFT: | ||
left = getPaddingLeft(); | ||
break; | ||
case CENTER: | ||
left = (width - currentLineWidth) / 2 + getPaddingLeft(); | ||
break; | ||
case RIGHT: | ||
// 适配了rtl,需要补偿一个padding值 | ||
left = width - (currentLineWidth + getPaddingLeft()) - getPaddingRight(); | ||
// 适配了rtl,需要把lineViews里面的数组倒序排 | ||
Collections.reverse(lineViews); | ||
break; | ||
} | ||
|
||
for (int j = 0; j < lineViews.size(); j++) { | ||
View child = lineViews.get(j); | ||
if (child.getVisibility() == View.GONE) { | ||
continue; | ||
} | ||
|
||
MarginLayoutParams lp = (MarginLayoutParams) child | ||
.getLayoutParams(); | ||
|
||
int lc = left + lp.leftMargin; | ||
int tc = top + lp.topMargin; | ||
int rc = lc + child.getMeasuredWidth(); | ||
int bc = tc + child.getMeasuredHeight(); | ||
|
||
child.layout(lc, tc, rc, bc); | ||
|
||
left += child.getMeasuredWidth() + lp.leftMargin | ||
+ lp.rightMargin; | ||
} | ||
top += lineHeight; | ||
} | ||
|
||
} | ||
|
||
@Override | ||
public LayoutParams generateLayoutParams(AttributeSet attrs) { | ||
return new MarginLayoutParams(getContext(), attrs); | ||
} | ||
|
||
@Override | ||
protected LayoutParams generateDefaultLayoutParams() { | ||
return new MarginLayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); | ||
} | ||
|
||
@Override | ||
protected LayoutParams generateLayoutParams(LayoutParams p) { | ||
return new MarginLayoutParams(p); | ||
} | ||
} |
Oops, something went wrong.