From 5e996612c662627a7489e7199ce32bd36d15f8e2 Mon Sep 17 00:00:00 2001 From: hc <1830560854@qq.com> Date: Mon, 8 Oct 2018 14:57:35 +0800 Subject: [PATCH 01/63] =?UTF-8?q?1.=20=E5=8A=9F=E8=83=BD=E3=80=82=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E6=A8=A1=E5=9D=97module=5Fcard=5Fgirl,=20=E5=8D=A1?= =?UTF-8?q?=E7=89=87=E5=BD=A2=E5=BC=8F=E6=98=BE=E7=A4=BA=E7=BE=8E=E5=A5=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 + gradle.properties | 9 +- lib_common/build.gradle | 5 + module_app/build.gradle | 2 + module_card_girl/.gitignore | 1 + module_card_girl/build.gradle | 55 ++++++ module_card_girl/proguard-rules.pro | 21 +++ module_card_girl/src/main/AndroidManifest.xml | 10 + .../module_card_girl/CardGirlActivity.java | 16 ++ .../hc/module/cardgirl/data/UserAdapter.java | 109 +++++++++++ .../hc/module/cardgirl/data/bean/Girl.java | 144 ++++++++++++++ .../cardgirl/data/bean/GirlsParser.java | 44 +++++ .../module/cardgirl/model/ICardGirlModel.java | 20 ++ .../cardgirl/model/impl/CardGirlModel.java | 43 +++++ .../presenter/ICardGirlPresenter.java | 13 ++ .../presenter/impl/CardGirlPresenter.java | 50 +++++ .../hc/module/cardgirl/ui/ICardGirlView.java | 24 +++ .../cardgirl/ui/impl/CardGirlActivity.java | 177 ++++++++++++++++++ .../module/cardgirl/view/CardImageView.java | 64 +++++++ .../cardgirl/view/SwipeIndicatorView.java | 77 ++++++++ .../main/java/debug/CardGirlApplication.java | 21 +++ .../src/main/module/AndroidManifest.xml | 24 +++ .../drawable-v24/ic_launcher_foreground.xml | 34 ++++ .../main/res/drawable-xxhdpi/icon_friend.png | Bin 0 -> 802 bytes .../res/drawable-xxhdpi/icon_interest.png | Bin 0 -> 930 bytes .../res/drawable-xxhdpi/icon_like_float.png | Bin 0 -> 5179 bytes .../res/drawable-xxhdpi/icon_unlike_float.png | Bin 0 -> 4003 bytes .../drawable-xxhdpi/swipe_fling_item_bg.9.png | Bin 0 -> 1150 bytes .../res/drawable/ic_launcher_background.xml | 170 +++++++++++++++++ .../main/res/layout/activity_card_girl.xml | 20 ++ .../src/main/res/layout/activity_main.xml | 18 ++ .../src/main/res/layout/swipe_fling_item.xml | 132 +++++++++++++ .../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 0 -> 3056 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 5024 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2096 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 2858 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4569 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 7098 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6464 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 10676 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 9250 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 15523 bytes .../src/main/res/values/colors.xml | 6 + .../src/main/res/values/dimens.xml | 5 + .../src/main/res/values/strings.xml | 4 + .../src/main/res/values/styles.xml | 11 ++ .../module/girls/main/GirlsPresenter.java | 3 +- .../guiying/module/girls/main/GirlsView.java | 11 +- module_main/build.gradle | 1 + .../com/guiying/module/main/MainActivity.java | 17 ++ module_main/src/main/res/drawable/tmp.png | Bin 0 -> 39610 bytes .../src/main/res/layout/activity_main.xml | 20 ++ module_sample/.gitignore | 1 + module_sample/build.gradle | 64 +++++++ module_sample/proguard-rules.pro | 21 +++ .../ExampleInstrumentedTest.java | 26 +++ module_sample/src/main/AndroidManifest.xml | 2 + .../ui/impl/ClipPathActivity.java | 60 ++++++ .../src/main/module/AndroidManifest.xml | 4 + .../main/res/layout/activity_clip_path.xml | 10 + module_sample/src/main/res/values/strings.xml | 3 + .../module_sample/ExampleUnitTest.java | 17 ++ settings.gradle | 2 +- versions.gradle | 6 +- 66 files changed, 1601 insertions(+), 9 deletions(-) create mode 100644 module_card_girl/.gitignore create mode 100644 module_card_girl/build.gradle create mode 100644 module_card_girl/proguard-rules.pro create mode 100644 module_card_girl/src/main/AndroidManifest.xml create mode 100644 module_card_girl/src/main/java/com/example/module_card_girl/CardGirlActivity.java create mode 100644 module_card_girl/src/main/java/com/hc/module/cardgirl/data/UserAdapter.java create mode 100644 module_card_girl/src/main/java/com/hc/module/cardgirl/data/bean/Girl.java create mode 100644 module_card_girl/src/main/java/com/hc/module/cardgirl/data/bean/GirlsParser.java create mode 100644 module_card_girl/src/main/java/com/hc/module/cardgirl/model/ICardGirlModel.java create mode 100644 module_card_girl/src/main/java/com/hc/module/cardgirl/model/impl/CardGirlModel.java create mode 100644 module_card_girl/src/main/java/com/hc/module/cardgirl/presenter/ICardGirlPresenter.java create mode 100644 module_card_girl/src/main/java/com/hc/module/cardgirl/presenter/impl/CardGirlPresenter.java create mode 100644 module_card_girl/src/main/java/com/hc/module/cardgirl/ui/ICardGirlView.java create mode 100644 module_card_girl/src/main/java/com/hc/module/cardgirl/ui/impl/CardGirlActivity.java create mode 100644 module_card_girl/src/main/java/com/hc/module/cardgirl/view/CardImageView.java create mode 100644 module_card_girl/src/main/java/com/hc/module/cardgirl/view/SwipeIndicatorView.java create mode 100644 module_card_girl/src/main/java/debug/CardGirlApplication.java create mode 100644 module_card_girl/src/main/module/AndroidManifest.xml create mode 100644 module_card_girl/src/main/res/drawable-v24/ic_launcher_foreground.xml create mode 100644 module_card_girl/src/main/res/drawable-xxhdpi/icon_friend.png create mode 100644 module_card_girl/src/main/res/drawable-xxhdpi/icon_interest.png create mode 100644 module_card_girl/src/main/res/drawable-xxhdpi/icon_like_float.png create mode 100644 module_card_girl/src/main/res/drawable-xxhdpi/icon_unlike_float.png create mode 100644 module_card_girl/src/main/res/drawable-xxhdpi/swipe_fling_item_bg.9.png create mode 100644 module_card_girl/src/main/res/drawable/ic_launcher_background.xml create mode 100644 module_card_girl/src/main/res/layout/activity_card_girl.xml create mode 100644 module_card_girl/src/main/res/layout/activity_main.xml create mode 100644 module_card_girl/src/main/res/layout/swipe_fling_item.xml create mode 100644 module_card_girl/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 module_card_girl/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 module_card_girl/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 module_card_girl/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 module_card_girl/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 module_card_girl/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 module_card_girl/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 module_card_girl/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 module_card_girl/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 module_card_girl/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 module_card_girl/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 module_card_girl/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 module_card_girl/src/main/res/values/colors.xml create mode 100644 module_card_girl/src/main/res/values/dimens.xml create mode 100644 module_card_girl/src/main/res/values/strings.xml create mode 100644 module_card_girl/src/main/res/values/styles.xml create mode 100644 module_main/src/main/res/drawable/tmp.png create mode 100644 module_sample/.gitignore create mode 100644 module_sample/build.gradle create mode 100644 module_sample/proguard-rules.pro create mode 100644 module_sample/src/androidTest/java/com/example/module_sample/ExampleInstrumentedTest.java create mode 100644 module_sample/src/main/AndroidManifest.xml create mode 100644 module_sample/src/main/java/com/example/module_sample/ui/impl/ClipPathActivity.java create mode 100644 module_sample/src/main/module/AndroidManifest.xml create mode 100644 module_sample/src/main/res/layout/activity_clip_path.xml create mode 100644 module_sample/src/main/res/values/strings.xml create mode 100644 module_sample/src/test/java/com/example/module_sample/ExampleUnitTest.java diff --git a/.gitignore b/.gitignore index 63fc54f..e3525e5 100644 --- a/.gitignore +++ b/.gitignore @@ -42,3 +42,6 @@ captures/ # Keystore files *.jks + +gradlew +gradlew.bat \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 9b51cd5..3ffa057 100644 --- a/gradle.properties +++ b/gradle.properties @@ -18,9 +18,10 @@ org.gradle.jvmargs=-Xmx2048m org.gradle.daemon=true org.gradle.configureondemand=true org.gradle.parallel=true -# 这个值一般跟你的AndroidStudio版本号一致 +# 锟斤拷锟街狄伙拷锟斤拷锟斤拷锟紸ndroidStudio锟芥本锟斤拷一锟斤拷 localGradlePluginVersion=3.0.1 -# 每次更改“isModule”的值后,需要点击 "Sync Project" 按钮 -# isModule是“集成开发模式”和“组件开发模式”的切换开关 -isModule=false +# 每锟轿革拷锟侥★拷isModule锟斤拷锟斤拷值锟斤拷锟斤拷要锟斤拷锟 "Sync Project" 锟斤拷钮 +# isModule锟角★拷锟斤拷锟缴匡拷锟斤拷模式锟斤拷锟酵★拷锟斤拷锟斤拷锟斤拷锟侥J斤拷锟斤拷锟斤拷谢锟斤拷锟斤拷锟 +# 缃负true,鍒欏彲鐩存帴杩愯 module_new銆 module_girl 绛 module +isModule=true diff --git a/lib_common/build.gradle b/lib_common/build.gradle index 87eb2af..560425e 100644 --- a/lib_common/build.gradle +++ b/lib_common/build.gradle @@ -60,6 +60,11 @@ dependencies { api deps.utils api deps.glide + // addition + compile 'com.jakewharton:butterknife:8.8.1' + compile 'com.makeramen:roundedimageview:2.2.1' + compile 'com.android.support:cardview-v7:23.2.1' + //view api deps.photo_view api deps.easy_recycler diff --git a/module_app/build.gradle b/module_app/build.gradle index 2776c5c..fea51f9 100644 --- a/module_app/build.gradle +++ b/module_app/build.gradle @@ -76,9 +76,11 @@ dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation deps.support.multidex implementation project(':lib_common') + if (!isModule.toBoolean()) { implementation project(':module_main') implementation project(':module_girls') implementation project(':module_news') } + } diff --git a/module_card_girl/.gitignore b/module_card_girl/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/module_card_girl/.gitignore @@ -0,0 +1 @@ +/build diff --git a/module_card_girl/build.gradle b/module_card_girl/build.gradle new file mode 100644 index 0000000..5da0ba8 --- /dev/null +++ b/module_card_girl/build.gradle @@ -0,0 +1,55 @@ +if (isModule.toBoolean()) { + apply plugin: 'com.android.application' +} else { + apply plugin: 'com.android.library' +} + +android { + compileSdkVersion build_versions.target_sdk + defaultConfig { + minSdkVersion build_versions.min_sdk + targetSdkVersion build_versions.target_sdk + versionCode 1 + versionName "1.0" + + javaCompileOptions { + annotationProcessorOptions { + arguments = [ moduleName : project.getName() ] + } + } + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + sourceSets { + main { + if (isModule.toBoolean()) { + manifest.srcFile 'src/main/module/AndroidManifest.xml' + } else { + manifest.srcFile 'src/main/AndroidManifest.xml' + //闆嗘垚寮鍙戞ā寮忎笅鎺掗櫎debug鏂囦欢澶逛腑鐨勬墍鏈塉ava鏂囦欢 + java { + exclude 'debug/**' + } + } + } + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + annotationProcessor deps.arouter_compiler + implementation project(':lib_common') + + implementation 'com.github.zhuchen1109:Swipe-cards:18df0b545b' +} diff --git a/module_card_girl/proguard-rules.pro b/module_card_girl/proguard-rules.pro new file mode 100644 index 0000000..f1b4245 --- /dev/null +++ b/module_card_girl/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# 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 *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/module_card_girl/src/main/AndroidManifest.xml b/module_card_girl/src/main/AndroidManifest.xml new file mode 100644 index 0000000..6e4148a --- /dev/null +++ b/module_card_girl/src/main/AndroidManifest.xml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/module_card_girl/src/main/java/com/example/module_card_girl/CardGirlActivity.java b/module_card_girl/src/main/java/com/example/module_card_girl/CardGirlActivity.java new file mode 100644 index 0000000..7cdda37 --- /dev/null +++ b/module_card_girl/src/main/java/com/example/module_card_girl/CardGirlActivity.java @@ -0,0 +1,16 @@ +package com.example.module_card_girl; + +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; + +import com.hc.module.cardgirl.R; + + +public class CardGirlActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + } +} diff --git a/module_card_girl/src/main/java/com/hc/module/cardgirl/data/UserAdapter.java b/module_card_girl/src/main/java/com/hc/module/cardgirl/data/UserAdapter.java new file mode 100644 index 0000000..23431cb --- /dev/null +++ b/module_card_girl/src/main/java/com/hc/module/cardgirl/data/UserAdapter.java @@ -0,0 +1,109 @@ +package com.hc.module.cardgirl.data; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.FrameLayout; +import android.widget.TextView; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.load.engine.DiskCacheStrategy; +import com.hc.module.cardgirl.R; +import com.hc.module.cardgirl.data.bean.Girl; +import com.hc.module.cardgirl.view.CardImageView; +import com.hc.module.cardgirl.view.SwipeIndicatorView; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.ButterKnife; + +/** + * Author: hc + * DATE: 2018/10/8 = 涓婂崍11:27 + */ +public class UserAdapter extends BaseAdapter { + + private Context mContext; + private LayoutInflater mInflater; + private List mList; + + public UserAdapter(Context context, List list) { + mInflater = LayoutInflater.from(context); + this.mList = list; + this.mContext = context; + } + + @Override + public int getCount() { + return mList.size(); + } + + @Override + public Object getItem(int position) { + return mList.get(position); + } + + @Override + public long getItemId(int position) { + return mList.get(position).hashCode(); + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + if (convertView == null) { + convertView = mInflater.inflate(R.layout.swipe_fling_item, parent, false); + ViewHolder holder = new ViewHolder(convertView); + convertView.setTag(holder); + } + ViewHolder holder = (ViewHolder) convertView.getTag(); + + Girl cardEntity = ((Girl) getItem(position)); + holder.likeIndicator.reset(); + holder.unLikeIndicator.reset(); + holder.nameView.setText(cardEntity.getWho()); + holder.addressView.setText(cardEntity.getDesc()); + holder.img.reset(); + holder.img.setUser(cardEntity); + + if(holder.img != null){ + Glide.with(holder.img.getContext()) + .load(cardEntity.getUrl()) + .diskCacheStrategy(DiskCacheStrategy.NONE) + .into(holder.img); + } + return convertView; + } + + static class ViewHolder { + FrameLayout cardLayout; + CardImageView img; + TextView nameView; + TextView addressView; + SwipeIndicatorView likeIndicator; + SwipeIndicatorView unLikeIndicator; + TextView mFriendCountTv; + TextView mInterestCountTv; + ViewGroup mBottomLayout; + + ViewHolder(View rootView) { + cardLayout = (FrameLayout) rootView; + img = ButterKnife.findById(rootView, R.id.item_img); + nameView = ButterKnife.findById(rootView, R.id.item_name); + addressView = ButterKnife.findById(rootView, R.id.item_address); + likeIndicator = ButterKnife.findById(rootView, R.id.item_swipe_like_indicator); + unLikeIndicator = ButterKnife.findById(rootView, R.id.item_swipe_unlike_indicator); + mFriendCountTv = ButterKnife.findById(rootView, R.id.item_friend_count); + mInterestCountTv = ButterKnife.findById(rootView, R.id.item_interest_count); + mBottomLayout = ButterKnife.findById(rootView, R.id.item_bottom_layout); + } + + @Override + public String toString() { + return "[Card:" + nameView.getText() + "]"; + } + } + +} diff --git a/module_card_girl/src/main/java/com/hc/module/cardgirl/data/bean/Girl.java b/module_card_girl/src/main/java/com/hc/module/cardgirl/data/bean/Girl.java new file mode 100644 index 0000000..5b32a26 --- /dev/null +++ b/module_card_girl/src/main/java/com/hc/module/cardgirl/data/bean/Girl.java @@ -0,0 +1,144 @@ +package com.hc.module.cardgirl.data.bean; + +import android.os.Parcel; +import android.os.Parcelable; + +/** + *

绫昏鏄

+ * + * @author 寮犲崕娲 2017/2/22 20:51 + * @version V1.2.0 + * @name Girls + */ + + +public class Girl implements Parcelable { + + private String _id; + private String createdAt; + private String desc; + private String publishedAt; + private String source; + private String type; + private String url; + private boolean used; + private String who; + + public void set_id(String _id) { + this._id = _id; + } + + public void setCreatedAt(String createdAt) { + this.createdAt = createdAt; + } + + public void setDesc(String desc) { + this.desc = desc; + } + + public void setPublishedAt(String publishedAt) { + this.publishedAt = publishedAt; + } + + public void setSource(String source) { + this.source = source; + } + + public void setType(String type) { + this.type = type; + } + + public void setUrl(String url) { + this.url = url; + } + + public void setUsed(boolean used) { + this.used = used; + } + + public void setWho(String who) { + this.who = who; + } + + public String get_id() { + return _id; + } + + public String getCreatedAt() { + return createdAt; + } + + public String getDesc() { + return desc; + } + + public String getPublishedAt() { + return publishedAt; + } + + public String getSource() { + return source; + } + + public String getType() { + return type; + } + + public String getUrl() { + return url; + } + + public boolean isUsed() { + return used; + } + + public String getWho() { + return who; + } + + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeString(this._id); + dest.writeString(this.createdAt); + dest.writeString(this.desc); + dest.writeString(this.publishedAt); + dest.writeString(this.source); + dest.writeString(this.type); + dest.writeString(this.url); + dest.writeByte(this.used ? (byte) 1 : (byte) 0); + dest.writeString(this.who); + } + + public Girl() { + } + + protected Girl(Parcel in) { + this._id = in.readString(); + this.createdAt = in.readString(); + this.desc = in.readString(); + this.publishedAt = in.readString(); + this.source = in.readString(); + this.type = in.readString(); + this.url = in.readString(); + this.used = in.readByte() != 0; + this.who = in.readString(); + } + + public static final Creator CREATOR = new Creator() { + @Override + public Girl createFromParcel(Parcel source) { + return new Girl(source); + } + + @Override + public Girl[] newArray(int size) { + return new Girl[size]; + } + }; +} diff --git a/module_card_girl/src/main/java/com/hc/module/cardgirl/data/bean/GirlsParser.java b/module_card_girl/src/main/java/com/hc/module/cardgirl/data/bean/GirlsParser.java new file mode 100644 index 0000000..c7aa2f9 --- /dev/null +++ b/module_card_girl/src/main/java/com/hc/module/cardgirl/data/bean/GirlsParser.java @@ -0,0 +1,44 @@ +package com.hc.module.cardgirl.data.bean; + +import java.util.List; + +public class GirlsParser { + + /** + * error : false + * results : [{"_id":"5771d5eb421aa931ddcc50d6","createdAt":"2016-06-28T09:42:03.761Z","desc":"Dagger2鍥炬枃瀹屽叏鏁欑▼","publishedAt":"2016-06-28T11:33:25.276Z","source":"web","type":"Android","url":"https://github.com/luxiaoming/dagger2Demo","used":true,"who":"浠g爜GG闄嗘檽鏄"},{"_id":"5771c9ca421aa931ca5a7e59","createdAt":"2016-06-28T08:50:18.731Z","desc":"Android Design 璁捐妯℃澘","publishedAt":"2016-06-28T11:33:25.276Z","source":"chrome","type":"Android","url":"https://github.com/andreasschrade/android-design-template","used":true,"who":"浠g爜瀹"}] + */ + + private boolean error; + /** + * _id : 5771d5eb421aa931ddcc50d6 + * createdAt : 2016-06-28T09:42:03.761Z + * desc : Dagger2鍥炬枃瀹屽叏鏁欑▼ + * publishedAt : 2016-06-28T11:33:25.276Z + * source : web + * type : Android + * url : https://github.com/luxiaoming/dagger2Demo + * used : true + * who : 浠g爜GG闄嗘檽鏄 + */ + + private List results; + + public void setError(boolean error) { + this.error = error; + } + + public void setResults(List results) { + this.results = results; + } + + public boolean isError() { + return error; + } + + public List getResults() { + return results; + } + + +} diff --git a/module_card_girl/src/main/java/com/hc/module/cardgirl/model/ICardGirlModel.java b/module_card_girl/src/main/java/com/hc/module/cardgirl/model/ICardGirlModel.java new file mode 100644 index 0000000..152a60f --- /dev/null +++ b/module_card_girl/src/main/java/com/hc/module/cardgirl/model/ICardGirlModel.java @@ -0,0 +1,20 @@ +package com.hc.module.cardgirl.model; + +import com.hc.module.cardgirl.data.bean.GirlsParser; + +/** + * Desc: 鍗$墖濂冲 鐨 ICardGirlModel + * Company: XueHai + * + * @author hc + */ +public interface ICardGirlModel { + + void getGirls(int size, int page, LoadGirlsCallback loadGirlsCallback); + + public interface LoadGirlsCallback { + void onGirlsLoaded(GirlsParser girlsParser); + + void onDataNotAvailable(); + } +} diff --git a/module_card_girl/src/main/java/com/hc/module/cardgirl/model/impl/CardGirlModel.java b/module_card_girl/src/main/java/com/hc/module/cardgirl/model/impl/CardGirlModel.java new file mode 100644 index 0000000..555dc5c --- /dev/null +++ b/module_card_girl/src/main/java/com/hc/module/cardgirl/model/impl/CardGirlModel.java @@ -0,0 +1,43 @@ +package com.hc.module.cardgirl.model.impl; + +import com.guiying.module.common.http.DataType; +import com.guiying.module.common.http.HttpClient; +import com.guiying.module.common.http.OnResultListener; +import com.hc.module.cardgirl.data.bean.GirlsParser; +import com.hc.module.cardgirl.model.ICardGirlModel; + +/** + * Desc: 鍗$墖濂冲 鐨 CardGirlModel + * Company: XueHai + * + * @author hc + */ +public class CardGirlModel implements ICardGirlModel { + String GAN_HUO_API = "http://gank.io/api/data/"; + + @Override + public void getGirls(int size, int page, LoadGirlsCallback callback) { + HttpClient client = new HttpClient.Builder() + .baseUrl(GAN_HUO_API) + .url("绂忓埄/" + size + "/" + page) + .bodyType(DataType.JSON_OBJECT, GirlsParser.class) + .build(); + client.get(new OnResultListener() { + + @Override + public void onSuccess(GirlsParser result) { + callback.onGirlsLoaded(result); + } + + @Override + public void onError(int code, String message) { + callback.onDataNotAvailable(); + } + + @Override + public void onFailure(String message) { + callback.onDataNotAvailable(); + } + }); + } +} diff --git a/module_card_girl/src/main/java/com/hc/module/cardgirl/presenter/ICardGirlPresenter.java b/module_card_girl/src/main/java/com/hc/module/cardgirl/presenter/ICardGirlPresenter.java new file mode 100644 index 0000000..ccdaf12 --- /dev/null +++ b/module_card_girl/src/main/java/com/hc/module/cardgirl/presenter/ICardGirlPresenter.java @@ -0,0 +1,13 @@ +package com.hc.module.cardgirl.presenter; + +import com.guiying.module.common.base.BasePresenter; + +/** + * Desc: 鍗$墖濂冲 鐨 ICardGirlPresenter + * Company: XueHai + * + * @author hc + */ +public interface ICardGirlPresenter extends BasePresenter { + void getGirls(int page, int size, boolean isRefresh); +} diff --git a/module_card_girl/src/main/java/com/hc/module/cardgirl/presenter/impl/CardGirlPresenter.java b/module_card_girl/src/main/java/com/hc/module/cardgirl/presenter/impl/CardGirlPresenter.java new file mode 100644 index 0000000..661191c --- /dev/null +++ b/module_card_girl/src/main/java/com/hc/module/cardgirl/presenter/impl/CardGirlPresenter.java @@ -0,0 +1,50 @@ +package com.hc.module.cardgirl.presenter.impl; + +import com.hc.module.cardgirl.data.bean.GirlsParser; +import com.hc.module.cardgirl.model.ICardGirlModel; +import com.hc.module.cardgirl.model.impl.CardGirlModel; +import com.hc.module.cardgirl.presenter.ICardGirlPresenter; +import com.hc.module.cardgirl.ui.ICardGirlView; + +/** + * Desc: 鍗$墖濂冲 鐨 CardGirlPresenter + * Company: XueHai + * + * @author hc + */ +public class CardGirlPresenter implements ICardGirlPresenter { + private ICardGirlView mView; + private ICardGirlModel mCardGirlModel; + + public CardGirlPresenter(ICardGirlView iCardGirlView) { + this.mView = iCardGirlView; + this.mCardGirlModel = new CardGirlModel(); + } + + @Override + public void getGirls(int page, int size, boolean isRefresh) { + mCardGirlModel.getGirls(size, page, new ICardGirlModel.LoadGirlsCallback() { + @Override + public void onGirlsLoaded(GirlsParser girlsParser) { + if (isRefresh) { + mView.refresh(girlsParser.getResults()); + } else { + mView.load(girlsParser.getResults()); + } + mView.showNormal(); + } + + @Override + public void onDataNotAvailable() { + if (isRefresh) { + mView.showError(); + } + } + }); + } + + @Override + public void start() { + getGirls(1, 100, true); + } +} diff --git a/module_card_girl/src/main/java/com/hc/module/cardgirl/ui/ICardGirlView.java b/module_card_girl/src/main/java/com/hc/module/cardgirl/ui/ICardGirlView.java new file mode 100644 index 0000000..343707a --- /dev/null +++ b/module_card_girl/src/main/java/com/hc/module/cardgirl/ui/ICardGirlView.java @@ -0,0 +1,24 @@ +package com.hc.module.cardgirl.ui; + + +import com.guiying.module.common.base.BaseView; +import com.hc.module.cardgirl.data.bean.Girl; +import com.hc.module.cardgirl.presenter.ICardGirlPresenter; + +import java.util.List; + +/** + * Desc: 鍗$墖濂冲 鐨 ICardGirlView + * Company: XueHai + * + * @author hc + */ +public interface ICardGirlView extends BaseView { + void refresh(List data); + + void load(List data); + + void showError(); + + void showNormal(); +} diff --git a/module_card_girl/src/main/java/com/hc/module/cardgirl/ui/impl/CardGirlActivity.java b/module_card_girl/src/main/java/com/hc/module/cardgirl/ui/impl/CardGirlActivity.java new file mode 100644 index 0000000..d5385df --- /dev/null +++ b/module_card_girl/src/main/java/com/hc/module/cardgirl/ui/impl/CardGirlActivity.java @@ -0,0 +1,177 @@ +package com.hc.module.cardgirl.ui.impl; + +import android.os.Bundle; +import android.view.View; +import android.widget.Toast; + +import com.alibaba.android.arouter.facade.annotation.Route; +import com.guiying.module.common.base.BaseActionBarActivity; +import com.guiying.module.common.base.BasePresenter; +import com.hc.module.cardgirl.R; +import com.hc.module.cardgirl.data.UserAdapter; +import com.hc.module.cardgirl.data.bean.Girl; +import com.hc.module.cardgirl.presenter.ICardGirlPresenter; +import com.hc.module.cardgirl.presenter.impl.CardGirlPresenter; +import com.hc.module.cardgirl.ui.ICardGirlView; +import com.zc.swiple.SwipeFlingView; + +import java.util.List; + +import butterknife.BindView; +import butterknife.ButterKnife; + +/** + * Desc: 鍗$墖濂冲 鐨 CardGirlActivity + * Company: XueHai + * + * @author hc + */ +@Route(path = "/card_girl/card") +public class CardGirlActivity extends BaseActionBarActivity implements ICardGirlView, SwipeFlingView.OnItemClickListener { + + @BindView(R.id.layout_swipe_fling) + SwipeFlingView mLayoutSwipeFling; + private BasePresenter mPresenter; + + + @Override + protected int setTitleId() { + return R.string.card_girls_activity_title; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_card_girl); + ButterKnife.bind(this); + mLayoutSwipeFling = ButterKnife.findById(this, R.id.layout_swipe_fling); + + mPresenter = new CardGirlPresenter(this); + mPresenter.start(); + + } + + + @Override + public void refresh(List data) { + UserAdapter mAdapter = new UserAdapter(this, data); + mLayoutSwipeFling.setAdapter(mAdapter); + mAdapter.notifyDataSetChanged(); + + mLayoutSwipeFling.setFlingListener(new SwipeFlingView.onSwipeListener() { + /** + * 鎷栨嫿寮濮嬫椂璋冪敤 + */ + @Override + public void onStartDragCard() { + + } + + /** + * 鐢ㄦ潵鍒ゆ柇鏄惁鍏佽鍗$墖鍚戝乏绂诲紑(fling) + * + * @return true:鍏佽鍗$墖鍚戝乏绂诲紑(fling) + */ + @Override + public boolean canLeftCardExit() { + return true; + } + + /** + * 鐢ㄦ潵鍒ゆ柇鏄惁鍏佽鍗$墖鍚戝彸绂诲紑(fling) + * + * @return true:鍏佽鍗$墖鍚戝彸绂诲紑(fling) + */ + @Override + public boolean canRightCardExit() { + return true; + } + + @Override + public void onPreCardExit() { + + } + + /** + * 鍦ㄥ崱鐗囧悜宸﹀畬鍏ㄧ寮鏃讹紝浼氬洖璋冩鍑芥暟 + * + * @param view 褰撳墠鐨剉iew + * @param o + * @param b 鑻rue:琛ㄧず姝ゆ鍗$墖绂诲紑鏄潵涔嬩簬鎵嬪娍鎷栨嫿 鍙嶄箣鍒欐潵涔嬩簬鐐瑰嚮鎸夐挳瑙﹀彂涔嬬被鐨 + */ + @Override + public void onLeftCardExit(View view, Object o, boolean b) { + + } + + /** + * 鍦ㄥ崱鐗囧悜鍙冲畬鍏ㄧ寮鏃讹紝浼氬洖璋冩鍑芥暟 + * + * @param view 褰撳墠鐨剉iew + * @param o + * @param b 鑻rue:琛ㄧず姝ゆ鍗$墖绂诲紑鏄潵涔嬩簬鎵嬪娍鎷栨嫿 鍙嶄箣鍒欐潵涔嬩簬鐐瑰嚮鎸夐挳瑙﹀彂涔嬬被鐨 + */ + @Override + public void onRightCardExit(View view, Object o, boolean b) { + + } + + @Override + public void onSuperLike(View view, Object o, boolean b) { + + } + + @Override + public void onTopCardViewFinish() { + + } + + @Override + public void onAdapterAboutToEmpty(int i) { + + } + + @Override + public void onAdapterEmpty() { + + } + + @Override + public void onScroll(View view, float v) { + + } + + @Override + public void onEndDragCard() { + + } + }); + mLayoutSwipeFling.setOnItemClickListener(this); + } + + @Override + public void load(List data) { + UserAdapter mAdapter = new UserAdapter(this, data); + mLayoutSwipeFling.setAdapter(mAdapter); + } + + @Override + public void showError() { + + } + + @Override + public void showNormal() { + + } + + @Override + public void setPresenter(ICardGirlPresenter presenter) { + + } + + @Override + public void onItemClicked(int i, Object o) { + Toast.makeText(this, "鐐逛竴鐐", Toast.LENGTH_LONG).show(); + } +} diff --git a/module_card_girl/src/main/java/com/hc/module/cardgirl/view/CardImageView.java b/module_card_girl/src/main/java/com/hc/module/cardgirl/view/CardImageView.java new file mode 100644 index 0000000..68334cc --- /dev/null +++ b/module_card_girl/src/main/java/com/hc/module/cardgirl/view/CardImageView.java @@ -0,0 +1,64 @@ +package com.hc.module.cardgirl.view; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.drawable.Drawable; +import android.util.AttributeSet; + +import com.bumptech.glide.load.resource.bitmap.GlideBitmapDrawable; +import com.hc.module.cardgirl.data.bean.Girl; +import com.makeramen.roundedimageview.RoundedDrawable; +import com.makeramen.roundedimageview.RoundedImageView; + +/** + * Author: hc + * DATE: 2018/10/8 = 涓嬪崍2:00 + */ +public class CardImageView extends RoundedImageView { + private Girl mUser; + private boolean isLoadImgSucc = false; + + public CardImageView(Context context) { + super(context); + } + + public CardImageView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + @Override + public void setImageDrawable(Drawable drawable) { + Drawable tempDrawable = drawable; + if (drawable instanceof GlideBitmapDrawable) { + isLoadImgSucc = true; + /*if (mUser != null) { + mUser.setEndLoadTimeAnchor(); + }*/ + tempDrawable = new RoundedDrawable(((GlideBitmapDrawable) drawable).getBitmap()); + } + super.setImageDrawable(tempDrawable); + } + + @Override + public void setImageBitmap(Bitmap bm) { + super.setImageBitmap(bm); + /*if (GraphicsUtils.isValidBitmap(bm)) { + isLoadImgSucc = true; + if (mUser != null) { + mUser.setEndLoadTimeAnchor(); + } + }*/ + } + + public void setUser(Girl user) { + this.mUser = user; + } + + public void reset() { + isLoadImgSucc = false; + } + + public boolean isLoadImgSucc() { + return isLoadImgSucc; + } +} diff --git a/module_card_girl/src/main/java/com/hc/module/cardgirl/view/SwipeIndicatorView.java b/module_card_girl/src/main/java/com/hc/module/cardgirl/view/SwipeIndicatorView.java new file mode 100644 index 0000000..1c19525 --- /dev/null +++ b/module_card_girl/src/main/java/com/hc/module/cardgirl/view/SwipeIndicatorView.java @@ -0,0 +1,77 @@ +package com.hc.module.cardgirl.view; + +import android.annotation.TargetApi; +import android.content.Context; +import android.os.Build; +import android.util.AttributeSet; +import android.view.View; +import android.widget.ImageView; + +/** swipe fling view璺熸墜婊戝姩鏃讹紝like/unlike鐨剉iew + * Author: hc + * DATE: 2018/10/8 = 涓嬪崍2:03 + */ +public class SwipeIndicatorView extends android.support.v7.widget.AppCompatImageView { + private float mCurPercent = -100.f;//褰撳墠璁剧疆鐨刟lpha鍊 + + public SwipeIndicatorView(Context context) { + this(context, null); + } + + public SwipeIndicatorView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public SwipeIndicatorView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(context); + } + + private void init(Context context) { + + } + + public void setProgressPercent(float scrollProgressPercent) { + if (mCurPercent == scrollProgressPercent) { + return; + } + this.mCurPercent = scrollProgressPercent; + if (getVisibility() != View.VISIBLE) { + setVisibility(View.VISIBLE); + } + + /*int newImgRes = scrollProgressPercent < 0 ? mUnLikeRes : mLikeRes; + if (newImgRes != mCurImgRes) { + mCurImgRes = newImgRes; + setImageResource(newImgRes); + }*/ + + float absPer = Math.abs(scrollProgressPercent); + int alpha = (int) (0xFF * absPer); + setImageViewAlpha(this, alpha); + } + + public void reset() { + setProgressPercent(0.f); + setVisibility(View.INVISIBLE); + } + + @Override + public boolean hasOverlappingRendering() { + return false; + } + + @Override + protected boolean onSetAlpha(int alpha) { + return true; + } + + @TargetApi(Build.VERSION_CODES.JELLY_BEAN) + public static void setImageViewAlpha(ImageView view, int alpha) { + if (Build.VERSION.SDK_INT >= 16) { + view.setImageAlpha(alpha); + } else { + view.setAlpha(alpha); + } + } +} diff --git a/module_card_girl/src/main/java/debug/CardGirlApplication.java b/module_card_girl/src/main/java/debug/CardGirlApplication.java new file mode 100644 index 0000000..6818654 --- /dev/null +++ b/module_card_girl/src/main/java/debug/CardGirlApplication.java @@ -0,0 +1,21 @@ +package debug; + +import com.guiying.module.common.base.BaseApplication; +import com.guiying.module.common.http.HttpClient; +import com.guiying.module.common.http.OnResultListener; +import com.orhanobut.logger.Logger; + +/** + *

绫昏鏄

+ * + * @author 寮犲崕娲 2017/2/15 20:09 + * @version V1.2.0 + * @name GirlsApplication + */ +public class CardGirlApplication extends BaseApplication { + + @Override + public void onCreate() { + super.onCreate(); + } +} diff --git a/module_card_girl/src/main/module/AndroidManifest.xml b/module_card_girl/src/main/module/AndroidManifest.xml new file mode 100644 index 0000000..2d5070e --- /dev/null +++ b/module_card_girl/src/main/module/AndroidManifest.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/module_card_girl/src/main/res/drawable-v24/ic_launcher_foreground.xml b/module_card_girl/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 0000000..c7bd21d --- /dev/null +++ b/module_card_girl/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + diff --git a/module_card_girl/src/main/res/drawable-xxhdpi/icon_friend.png b/module_card_girl/src/main/res/drawable-xxhdpi/icon_friend.png new file mode 100644 index 0000000000000000000000000000000000000000..f33b9b55dedcadb32ec41c7f9a7b8b2628441b67 GIT binary patch literal 802 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAifOS+@4BLl<6e(pbstPBi{OaVS2 zu0Zh-4*vNa+XoDSu#zCZVEvY;tk7uXT9X(q1E=zAO)Z@o3tjd&5k`4|c)P}2DH*x2 zI{$iZAw#yn@HWvjmLgSaU$X`#4wp=xLWy9b(hgQZhYWjO@z%~}KW545{Ps#$y)K3m zqROv<;hpK};usQf`0e%ZqGku4hQ#IH?^Wx++iQO3AY1dsqW`O(=n8KT3-gluZhyd> zCxg{x-@la|O(IJaSQkd-mHNwX58m5v@7Qbir{wZeXG`9?rS3Zd`1eTa%5CBMC)3Sb zn#L_~#hYgZgU5276@8AiRwgW4a*a%mFLX8vIk+&^$mHNc8_BFk0h4)lT7)P%v&v*m zT<9+2b&0*G%Tn@K%5j4esSaX~RMuH$r{oIG+VCwf=(BZI?{-D@x{S%YH=p0@*R%J} z>3OP|v;SP5`25MfPx0>QzvpRp87&Ol_hPSm`RbeAMk((?HlCcf(^)7)&c|`WXPZfF zR?SK*DMxk}UASo2@?=MvMaXTY&NprnUp6oXsq!@~d?TT9*{*qkI{Omibw>ogF)FQ_ zE9SJ_VU>EzyUYo?EyqkUJURAWTp+Hv#i{w1(~B0ir!4`qzWfMQ{pb+q^K|Z+>I;G| skENzpTS^uEYA;^t_UgF5BbU-w-ivk%=hbOSn}brer>mdKI;Vst03zVj$N&HU literal 0 HcmV?d00001 diff --git a/module_card_girl/src/main/res/drawable-xxhdpi/icon_interest.png b/module_card_girl/src/main/res/drawable-xxhdpi/icon_interest.png new file mode 100644 index 0000000000000000000000000000000000000000..14fd0515e2aa34d7f026fa1dcbdc6748152d7ff6 GIT binary patch literal 930 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 literal 0 HcmV?d00001 diff --git a/module_card_girl/src/main/res/drawable-xxhdpi/icon_unlike_float.png b/module_card_girl/src/main/res/drawable-xxhdpi/icon_unlike_float.png new file mode 100644 index 0000000000000000000000000000000000000000..8a50d82b2cb11e269c0c315525b3053c758a2a40 GIT binary patch literal 4003 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 literal 0 HcmV?d00001 diff --git a/module_card_girl/src/main/res/drawable/ic_launcher_background.xml b/module_card_girl/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..d5fccc5 --- /dev/null +++ b/module_card_girl/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/module_card_girl/src/main/res/layout/activity_card_girl.xml b/module_card_girl/src/main/res/layout/activity_card_girl.xml new file mode 100644 index 0000000..912387c --- /dev/null +++ b/module_card_girl/src/main/res/layout/activity_card_girl.xml @@ -0,0 +1,20 @@ + + + + + + diff --git a/module_card_girl/src/main/res/layout/activity_main.xml b/module_card_girl/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..89ff011 --- /dev/null +++ b/module_card_girl/src/main/res/layout/activity_main.xml @@ -0,0 +1,18 @@ + + + + + + \ No newline at end of file diff --git a/module_card_girl/src/main/res/layout/swipe_fling_item.xml b/module_card_girl/src/main/res/layout/swipe_fling_item.xml new file mode 100644 index 0000000..363edc6 --- /dev/null +++ b/module_card_girl/src/main/res/layout/swipe_fling_item.xml @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/module_card_girl/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/module_card_girl/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..eca70cf --- /dev/null +++ b/module_card_girl/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/module_card_girl/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/module_card_girl/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000..eca70cf --- /dev/null +++ b/module_card_girl/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/module_card_girl/src/main/res/mipmap-hdpi/ic_launcher.png b/module_card_girl/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..a2f5908281d070150700378b64a84c7db1f97aa1 GIT binary patch literal 3056 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 axPAxe%7rDusX+w*00006jj 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⁣ zwiG+x#%j}{0gU~J8;<|!B1@-XaB@{KORFwrYg_8rOv({b0EO#DbeQRm;B6_9=mXGf z-x|VL{zd`)#@yN}HkCSJbjbNlE|zL3Wm9Q8HY`sV)}3%pgN>cL^67{Z;PPL(*wT8N zUjXU{@|*hvm}({wsAC=x0^ok0%UAz0;sogW{B!nDqk|JJ5x~4NfTDgP49^zeu`csl?5mY@JdQdISc zFs!E{^grmkLnUk9 zny~m)1vws@5BFI<-0Tuo2JWX(0v`W|t(wg;s--L47WTvTMz-8l#TL^=OJNRS2?_Qj z3AKT+gvbyBi#H*-tJ%tWD|>EV3wy|8qxfzS!5RW;Jpl5*zo&^UBU=fG#2}UvRyNkK zA06Dy9;K1ca@r2T>yThYgI!ont$(G{6q#2QT+00r_x0(b)gsE`lBB?2gr55gq^D3Fi&p%E(p9>U%bv zkg1Jco(RbyTX7FDHOnl7-O@ zI$AaIl?9NJKPm(WiBP`1-#CB1QzU>&hKm)fpa5DKE{2$X0hGz-0uZ?cyTk(YC!Y&| zL=1VrNERSA5NA2jq7FACfX4JfPyj5XXl1yv0>~s;eF7L2$>&oMqeTFT2m$y7FlkON z_yurD1yIOvA;5C6016pyxBznGUt0kJ&k5r#;&>Jow`r)sp9R~PmK~lz$3xH%LT*1U zJdOyABZ3!FvNoR*vN$5ykHS8f`jA4zV+|L}i1C4`B2c{R0;UdYxaU|H)2avz@ z=mEYc|2S<+(B2Tj+FkX+2D+yFI!k9lWMA61DJ{)e;lum$(;O87?vGJJe!KtK04+N_ zI*P~t@dUb>9Xh{dbyl{-ZQ(UMgz7$|QfL5XSPkskt^NgctYC#;4WcZB1@%@wy@2t3 z2z0DI7&%b$*Aw~abe?GxE`ez@+6hOh-6*8fHRV{1os$EL@}uUZeG4h1&Be`98q*7j z=3-v+lhIjfWVo12!<>%V^a6lTgW3+_#W6n|p*~==zOH7z$0{LSZk(Tpd7EaD04hnA zL;#fxS0aD{`5^&D`}>0Uq?byDD-l2=!wm_bLcUl4gc(% za1p|itVANvFF>hghAS07Im1;IK;|b*W)}VDyI;BIp2=K*yu2a)j?B|f<44NI$NbmJ z#dE0>jI$fMr&@>4kN8MLFb4&2O9fEKaQg%(QO$4_1rVQywG^CmBLh#}_7gKW3vd?| z2?1^&KWq8}8I^_S0|)MowU_pw$q@nl@Nkn$z>BQq_KA^9yaR`(R3u{{Ig;cwt z@AJ^{ODQCm^neroM9nKNUAXi9RCK`OsP_LuR0PUR(YZCCX5dNF6VzcoK&=b^r`W?ltt|*F zpkoae%ZT{C1h~EcFui~b7fF`vb<<~j_VquuUA$}QqIKYELPp#;{u?q8Dz}WAG-(3; zjrm$i%7UbyZMM(Y{>!uJ#vNB?R~B{6Htp=>e*<{fQQ5W7V(1coCWlOON!MzZxhum| ztZBQpGR z;~#ur^&PockKdV{Q6R>o`Pl{0x!DEbpZ7y9Y;*ZvE!*gU`V1W3znva{f=?WO5I&>B z&hw6}tjECtaghm5z|C#%M;Yf_*pI^};h}Vl=^r9EN=tVDj86D;C$jIJ?K7VP+00000NkvXXu0mjf D5i!M* literal 0 HcmV?d00001 diff --git a/module_card_girl/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/module_card_girl/src/main/res/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..459ca609d3ae0d3943ab44cdc27feef9256dc6d7 GIT binary patch literal 7098 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 literal 0 HcmV?d00001 diff --git a/module_card_girl/src/main/res/mipmap-xxhdpi/ic_launcher.png b/module_card_girl/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..8ca12fe024be86e868d14e91120a6902f8e88ac6 GIT binary patch literal 6464 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 B0*L?s literal 0 HcmV?d00001 diff --git a/module_card_girl/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/module_card_girl/src/main/res/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..8e19b410a1b15ff180f3dacac19395fe3046cdec GIT binary patch literal 10676 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 literal 0 HcmV?d00001 diff --git a/module_card_girl/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/module_card_girl/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..4c19a13c239cb67b8a2134ddd5f325db1d2d5bee GIT binary patch literal 15523 zcmZu&byQSev_3Py&@gnDfPjP`DLFJqiULXtibx~fLnvK>bPOP+(%nO&(%r2fA>H-( zz4z~1>*iYL?tRWZ_k8=?-?=ADTT_`3j}{LAK&YyspmTRd|F`47?v6Thw%7njTB|C^ zKKGc}$-p)u@1g1$=G5ziQhGf`pecnFHQK@{)H)R`NQF;K%92o17K-93yUfN21$b29 zQwz1oFs@r6GO|&!sP_4*_5J}y@1EmX38MLHp9O5Oe0Nc6{^^wzO4l(d z;mtZ_YZu`gPyE@_DZic*_^gGkxh<(}XliiFNpj1&`$dYO3scX$PHr^OPt}D-`w9aR z4}a$o1nmaz>bV)|i2j5($CXJ<=V0%{^_5JXJ2~-Q=5u(R41}kRaj^33P50Hg*ot1f z?w;RDqu}t{QQ%88FhO3t>0-Sy@ck7!K1c53XC+HJeY@B0BH+W}BTA1!ueRG49Clr? z+R!2Jlc`n)zZ?XWaZO0BnqvRN#k{$*;dYA4UO&o_-b>h3>@8fgSjOUsv0wVwlxy0h z{E1|}P_3K!kMbGZt_qQIF~jd+Km4P8D0dwO{+jQ1;}@_Weti;`V}a_?BkaNJA?PXD zNGH$uRwng<4o9{nk4gW z3E-`-*MB=(J%0*&SA1UclA>pLfP4H?eSsQV$G$t!uXTEio7TY9E35&?0M-ERfX4he z{_Hb&AE`T%j8hIZEp@yBVycpvW2!bHrfxbuu6>_i<^9@?ak)9gHU*#bS~}$sGY*Fi z=%P&i3aH%N`b;I~s8{&6uGo$>-`ukQ<8ri(6aH6p_F`Fhdi6HuacwfQn10HVL7Om1 z4aZpjatkbgjp$L5Mceab#G#C)Hr{^W|TJX~?B3@2buj0;kfuNTf4c3*Au~O^aj=W2$j^4okeCxh#lwexN@eam-u4dNz zN2NIuIM4566{T&^k%4ftShcPk#=im-zXm>QWqH^0>A@?MqlDZCZ@8Wi*@tvhn5p<} zRwFm@gz|WZp91S5Z{}tB^e9|FBg(~Ik+?&_53J6ye_QQOSJ*846~H%s#LD}|O9v9H z1fLrrgoPo_&bs}eqEr}2en3iqAcP^>YsKiez$5-6m6(#3ZZ$@M5Ck=_Vv`QA>1A*v z3w-nJ_;5Nc(0_%`kG91#sotIlhO!*5#|yg+Gx{V;0ty`*=Y9=jCh$l*=fE(~t}%R# zc}iNpO)OZX`P=leQY^?^DF1w%FJh>Dkp}-o5Ig|2!6^E>|W|zc~W7gF;MtxX7 zV~UjQNsUC$EYXpN?~o{83D2c*0~7;Tm~%FRTAnnt3ln{?DcLZ=NsBY|JxwUA-6K3V zP&#|9t#a}Q4{Sg{6v-OmjJBkCh>m)8vLNm4lStMUT$)FZeJG05A)px&o3H)5oAl9= z31@?HyCriHcCDnt628BFN+T;U69Wl#itfvqIDBydMvOJO0Zl?go$cfG5>TK75CMj3 zakLaH3=&J0e}Xmqlav$S0>E@_Yo_V~3SiiXrw)$&!XhrHCDQ%P1BHPusuKr0LthAB zg)mDrLy>2*yevMMOQe6fZ|)%PEb!lC^*9yaX9UMy7-v!fSICssTR|wML0Ic2BhKAq z3I1X~ z7^_!M&;6Z9?br3#HU_&kfJ~%botXQkC1v<}ZZxN5q-T)|Sb2cW3WYUBbDZ`TH{!*^ zrmAeRM+(QI>D+?}guZ+dH*X)@^!O|oL69&Avbtw2^M3HP(+2kV{O$^3BN1RLfrC8nwz7=VhBR%>!;7WR<~;34B_j3A{>^@e@H+Q! zL=UNr1(JvKAQLKT0b}EMn|QUWtY>!>8-t@fVj_&`~gGd{_aPy5W>0u5L$zrsU^rBO=i$`#Xd*>kh)lPf}A znNXSEl`+HlhXtylgS9(#N02A=zVV?#OF?)Gr>(HszVa+1*2VG@qYttJuXaBlzP`Pb zX)ueu?s&}R>xI#^*r4gR?tMFi!_eeKlIM5g)Nk)Y^h=ZCR**xY>$E5knctRrq!zw? zX{2|hwR9LXTY1)pTlKg7U4_ej{dcj2{!+1sZ6<@9^?mn)=37V)DIAvS(}S`IgFO!6 zn({?nYw`Z-@jvt@!q|5z?TI3(dx^1szSn%azAwp>N#fk^kt|=MejKtacAs@Rdku#zT>9$s z=m7ek)`=O7hO2n+2Uj$QUs&2EIqycF{(L9Y#^IyxXA%R@ z&j`VAprIV~d!pH-7~zA+bjwVn3kOB3;rlg{nr&wHV12N}g^i>Upls~=z`VX>9HQ#= zTu&luVb@_Lkz63&&^_M!6(-2^0?GCAX9XKp{O={pd|AlIMGriX6s_Jy8_q9|{5jLc zxd1aj_ucE7Vcti#$r!s~w~W=XpaLQ}#mX`apR7^n9-d3?O+adJYr*L;{c)x@REewM@vZN0njS3iE$88KHPWAkWt((OUMherUnPm?i&8@!9E@ zUW^$%CpdruZR0ohzUq-XQ$KEIB8Sjgs1+wKSUH&Y;=ee%E&O$X18{&979d~K2uJW` zd*8awHCXb;Q>4z$B|sPNv+Zd__f6&@KmS+L`z3H1x+x|Xs7-N-iw|1C=QiJdU)f~z z{vO4hpP`0MyqmwIHN=l?jSq>OKG6CEC#O`*blP`?>)CUWj5j1cB>%6N7;`kfZ1iQV zam~SDB?{uyp^=vF_u|=8xn3S)L;wF8ZRZV{bezM-EH;MC91JQZ{KcZZ$IWJUy?SJGeGUWm6PeuO8-K2|hD~p;Ls~9Y-4lE+?|bF)XaNKUNX(K7 zBQk0Z{n>hrH-CA`bTr$6z0n@Cn9EL$XZ3=X7NopjcI=;z<(X7-oEmK}BId=PxX*!b7Q6oL@ufd%eEPc`_la(}WkT zKe?-YJWn^6b$^{dhdJZ)I!Kn6c}iw%o5mLDyvM7qJZbkGG?zLU;M|W;Wis|A;SuY3{_X53`+>9g^B%O4b{;^t$^;{oKHbo*CY%u91 zp#2d8Pg=I0&UX{qwr=y=o_^BLdk=KYH$=Z8+k|p8V5`ph~3b^{^NnL4m_+4zx( zeoTt@f<$DmsB1}o%R1Hx`ToPuBl+P6cb-?uF{1!z-2WvdR4+vJ*SYTic5@gwnzu%e zD!HF^X=$ha^#1hi*@~^nDL!HQ;MC&e+6=onaJgm-J-+|>PpmU=SIe?EQE5vJiqziw z*K=Z%bWZz_we!qiFqE`I?#$yozNxIE7Ei;csv>++r*?)0bozFpF&oLh94u z-2c2L`5BarP7l>87|f)vxaT*9(!Q`2xBMZ&^JVj-|1)Tg!6OW=lk=w zLwVlr!*<(l*L$a?ox3+%!~UIj3Ej@KD;W>1E_c)1szDi93BC;0K?drOQ>@$yi|DtT zSir}!Yx>znf&b0KS;Lk7VKPDF@e>(qQr0%SNcGQd(p9StjqJ`QSW&c{ggF?5{d22w zlkX%JTUq`;(3WSH+)WHl%qlF)iNG_?}K?ZM3cS7#u5v zZ!apx4Apv=PWsn}eD%MI#=KA)OlNy0)l@~D^1;NC5k@|OPW3wt>WNYDN+8~+gM%E! z$ z`Olr0;eytiK&~O*ps%KV?2vq+DhuRh*!6Ilzu>A;iMe9 zI?zug9nT9CI_o)O}KF_I_U z_Cswu{)3pCYgw{eOt#E?UCqBwkAugSl>5 zX?G=Ci(Lo+r3suuJezyQyDvw*<1b{rx*&ZaY2HlJ>k{Qc%IZeU43pQXw4mh!4I5>l zZ@4$uxaPY#!*IhL4Hctn#!n#S+SiPcZP_PTd5fXf1exhFi5zf3kl`UcW2RUk)F2oF z_ogN`{03PiseQR;fa#{Uy;jeNlJ0Sle`~;ZYhLjkuy>a^!Z_nR~`$&F?NVuIE3HX;i zD82snwlwPb`7yE)ZA_Ndmq5zuSO1{{1}(d9u4#!Fl_|eOuxKBwOfQ*tG`VjCV$-WF zxi0c&+w}Z)rqz{%f46@`ADPdGm#x)+zpT+gyfDi;_P zR{#Ta`Mzd=putKO@5lQJO*aNy(i?}Ltwy^Z;69f|eqi#UCI1$vL!+(#mi?dK`OL$! z3jQnx$_$+Li2<__CL@Wuk4^J7-!n3j2I4N8e#=qpir+iEQcrn3`B4yNOd1BBLEni<(tdRWE>m0I^ zt(^*Td+S3}$5rOzXy=MW>%#MN_qy%5St!>HrGZ~Fq1WKw-&kv@2TrCcPCPzY%2aO- zN?7@+$4?&qA|uv{QHuV)O9haZpG7Jx2f%D)7J@oWTxJ#E_YSq_6qT1tomOD?02(1otT{Hk8{?g(944>h4f% zOJ8tzjecV{x2uWde&6oAP)*({ zFkW0Q%gdI*9@W)oKO65DgP<3F_BIKvRXLAR?Z61&0g2TR6mEZ7OZK?dP7zukdg?s_tNZeuOsh^e1Tmdlz5rIg?LcK|%aQ1FsSDv#W0EnHd z9M)p;gAL_R~Z5cojTdwy+qDsd6R01Vtxmq&FhfPz{wxmB$${zW~z@{Ro_ zK#y5^KqIp!#@or>GD`c+aZ(PV1=`Eo1?a55p6a*WepFgxvmp!^2518YEU-;{F}fLr zD~)=S0m=+px3TUN8-El}Xb}{2ET*_i3-|WlY@V7vr6#&cOr*+oS9?GF?@)K6op>>o z4af0@%KwaLr`{3P&)474<3rDMsd!IM-bepWfhfuMmJt}#0%PgDSx*q(s0m%ZFgWTj zwwvH%2!(i9{RHX~FVUB5qHvF{+ZF}+(bZVPG1)a*Ph>KV;cYNK^aB@R#dS~&`^60V zn2Z24Y{{djzK33}t@q%!v5k)u7jAXB_H{#4Ut2 z1}0j5$RXcTyfazqL9=^Qe%GL`G)=!lirv7AgVRf^=XyEM&kiOe_%JD!O?sXK&hrDo zF}m9B68im!oGshuZluy2H#T$`XPZQu@zf;(nBCZB-cjQ&w*p@Tm_$pe^MTN3EauI) zJG&G^H-4S|1OCd#@A6jO+IcAXG#5M-d9E!^YNmV7Z(=F^?8bfrYf&mLMnRd_22&Q} z2*msbLsrI!XPeOK@|V?n>`kNC`8eSFmekELLr|!-wQRltxZnuRedup<7VflowJ+gC z)F}P6lUSsh^B41?=~0*68YA6z63lKG`W$@{GV!cC2FCl0s<7yz6!3JWoBbUDTgpg% z4VNUk%xblMy7PjLF2We*3XY7K*N(*9Yx!_M zjU$&JXLiNxaTzoa&k@NSbzbLJTn$6bu6SPWYx)Zc1Li~Lqj($GuWsA#;zg85eH{yx zz3IIOea3A4QFGmJCfn7N_d$8a77j+T^W}Sr%0XdVLFf&zJ$s^D5Vrc!iV&GXyb5*A z6mG8d*6EDN7a;=dgVjYI--~4@Fe{{fcJ4B|;_Qg~&%6#?I(?X_$S4rDw{=>=8iZS=M^I#EF!m zXn%K_xXWwmm7R40LKXPo6ZzNZfN1-$S6RuVU=JlC|3#Xjo-%ebJvvC4n%IM)Q8NDh zGXd)L;ay_JMozc^mU*Uifnp=#+if>LD*O9MV#@wB1l``z|tlu(7PJqS6rm)0@ zJzP50{0Vpa`_?92oB;*i(?i225a6tZgT+9Dg?vTh)N4OKA~(c8{$8-ZKz=mb@$4IT9g8>;k11WIT+Y=%Z})`y#OJ zK-~rlEy!T%0h!Qo+jjPF2RQz2Z^B;dbvYg2JS`+@D~OWH{2-EEs^BdnuJskh>CKeT z1b;%8dU6QU%i@z?^6Q-{XESe^qRiw`ka+k!d-{c%&lXM}vCX^T=|?|;t6r?N*h-W4 z?o4Hy%BWqW+5=+md#5^8|49zjM zon_Do@rhzZ4XAb}-m|bMH$Vg<;^Bo6A8cfhUQ>|wFk~j(`>1NgD3sTg)He1pWrUj9WZ8R(Wn5Rr zhc&dXvv_m%HrwwHo9l_))NgdVUff%d&@4^$Pc=MDZdZ^xHL$KX^ z7W1{3UJ%>9v$W{Y3>vBvflE-soDj8{`>#F|8Z$EF%lN$NylORTn5JsI4mTMHWd*%- z2sD(RO(H-&i8&Ge)5i12slI5VekYCZ)s8rv&_)194;vKY2m8DIC2{4<&xTM3HHxwT zd(42n)gCJ$O4I|8sJq07#0U7Yk7PjPK&bMdy-5b)OdhSsBo^|IB_H43@&F@tpdJR0 z#~)=UJdP|=)O{0(rVZnjbTtwHV^}&kfLJQP@R6rda;K;O>9J9bnW$BgbzOZ8aO{D8 zPuJ%=Nqg~rdzk-IW0ZC5I%cc;ek5~=lDXl4?gMOQQ!KE5Aq$9qeGFM6jFP;Xy6)%N zjg{q(E6fnF02P3L*tutbHRR-gyYK3g^y9H?GMtIs;ojG zY~3*C>qD)(8jz}89w|xfb7L`^d>AG#%D-uq=qz}(o9kzzrx0LSBX90ykr*5oM+YmoTRWe+Cj6aq^xnWRymLmE>krCpoC9K%2LT0aK0Y< zt@kUUrrj1WL9rmBB8B;WXqg-BztOiUZX-!`*a&-75+!WZ!R0OPiZz?w`Of4q#+(;m z`${Ea6GnTCY3`V2R8w*}knf)*`RA@(8k{Lp4VP;<+ z9O_z0_{3=HcVi z5)&QGEB_&$)mu@)(Z8zuw#>Gc6C>^O-FUZEo;TO1@$>-xu%`v`tMS3V-8R1pb5w&zP%&rAP2*5h z$k{jqReFXCJhJ?-{x(2j5gH_zQ>;#Ec*@bUqF0u}XB09+U-K}+jQd>)k#AOkr6M8x zHyhrfJ`99@Vzr_B@*p@`DxeJ#`jimavZ9ZV%v{mO0!%9$TY(f%_}BU~3R%QxmSdD1 z2Bp45R0C=8qtx-~+oULrzCMHMof!&H<~~>BhOu9t%ti7ERzy&MfeFI`yIK^$C)AW3 zNQRoy0G}{Z0U#b~iYF^Jc^xOlG#4#C=;O>}m0(@{S^B2chkhuBA^ur)c`E;iGC9@z z7%fqif|WXh26-3;GTi8YpXUOSVWuR&C%jb}s5V4o;X~?V>XaR)8gBIQvmh3-xs)|E z8CExUnh>Ngjb^6YLgG<K?>j`V4Zp4G4%h8vUG^ouv)P!AnMkAWurg1zX2{E)hFp5ex ziBTDWLl+>ihx>1Um{+p<{v-zS?fx&Ioeu#9;aON_P4|J-J)gPF2-0?yt=+nHsn^1G z2bM#YbR1hHRbR9Or49U3T&x=1c0%dKX4HI!55MQv`3gt5ENVMAhhgEp@kG2k+qT|<5K~u`9G7x z?eB%b2B#mq)&K}m$lwDv|MU~=Y(D2jO{j*Box$GUn=$90z6O^7F?7pn=P;{r4C8qa zv1n*5N7uIvTn`8$>}(74>Oqk=E7){#pHUFd5XRJ5ObMhqODTa}=V0;+a(7JZR-4<3 zBTvsqRwLh?*ZF)JWsWOkEq7*XMQ!G3Rmkdh7ZbM#v1~?jt((e2y}u}Ky>1qa&Y7m@ zveIzH@?5Gexr79*?sbZGkVS;s1U<7D(%~7HjAmzj$aDYv_FGl5JX@LW8>w=HCDl6W z%?rsr0)bErYJ5G1v&zjr{8=lW)ZYcstgZAuL}!0~8HAcgOm@nJ9cvOOtL@)Fpl2Dr z8876Lt<|1eF88Jx#C*XyGI)C5z_o!Os!t=Xy0$Kj^4fG1pb@16%g z+<)zJ1n1QO78g#$3yHj+(Smv`HW5y_-PP{h2A1UXMG-c%hMvHLbF6t}G>KA)H# z`AWL~>8JUT(iq7;zJr!Aj)AS+n{mRbA3aM+Gj}b#PhHdTM_NkwQm330EC9waM$=slPfxR1vmr!vf~t_M?a%`@`&tdE}ipY-p#Q#zhLK zd9eFC;PjIEAKLkRkO94{rTuNFqKbNUGtaNZRRbax9;|%2WbnGu!44#64RriY5u0O} z05G^e&JB?Wb*8^g)aM`yt|}~QJkKCipFNeyex~P~SFPVEafD(73rncKmm)m~&`O*YUyY9z7tO%ec7z@wWcoOr-ebP z1k+|y?d{>1jLC=s4B2tEhiTtu->WVJno&%%6bG46KuU9D`GEN!C!9chM>zd=cl0+- z^k>4rpkq7_iWGHtBvy$Q`dja2;1ZdYmF6cANU6{v>l1=fSKRpsTRonp@alC%p{bhU z>g+(%-)&_nDQ~#bq5;xo^06RggA&uH4RMVb6wt;oQI+`m_zt>SiI5hXkfEnn6@ZNk zh9KUr1jtt6lBg$O#TAoTRvwUtWeMP3EjnGoRPQppiNF(sX%|Q4@kIjas|WZWXSENO zfF#2yOb;%XO*LeOoAwlf{u7_39$x(w3xT~)2BNJ2l5u4n3a0NkNLT4yT);7fA?1Vt zCz*`hbw-doYa09E!05zcfOT0EOORY``E@D z5{v%@F~&|UfNt@>vrj66W5f>jy+G_8&VB9D0*>N!7_Nr=-x6N?A)M8>1~q(X34sXp zpA%@w&c};L7u*G3;(Qe=LFL}NbTF$|aX#A%P(h`-N=ZRxCvlG$>Klv}jo0MS|UR8qKq-1FokBJmrbTJjQ!k#Is0tY+0c)m4Gp80YzYD zEGXd~ihaihk;?xUknXNH?rssjzaF+l6?HnDQjVP$i=q}{lp_WbOTKKg}HPKW)2sW`L#NvgmaY0^b2Ldk|t{P6{L{>ym;Xgao1PrudBgEMRFb^ zkPJ6v0h^tJ>K@;maHk_|6Z>yFzq@YvDOeO6Ob_?P4Ey>kHiJv`Wlh_MX4fBY36f%^ zV#2t;$Rg&}!Kwifm z;TVZXMxw3~$--{&A8-6vnUZ#s4`Z-zQ#+y7UI8#Hgsc|ompLUc zqlAG!Ti>t{JzYF^5pM925*PUWUvDuYDGKhC4FMx45c`L#V7%V+88@|khLj|V=J9Un zJEcP5qVCzR6p{FK!nIY~TXo)tJ!{>CG;~&u;EPlnNrwJ=5)ke@hJosN!siM$8b2mM zmc&weo-rY{n1+%c`c<{AT3i zjF{p253Ul-)s5A+!8Dp7?viXAdH1+qlY%mK5pp?{pS1t!3qmmDOq2TnoV`F3<>(XK z1=gfH39N_~8O+~({MZX~+QHyB>vtgwK0@uqGkX^eaf$UFHiO#>LB*7@=c0o6`0muj zmH00_F#p)s3E*$A-zP+p2bvXARTg3)Lxh`tf~9X>7!Z^kHV`uE%V9+BiBG=mxj*)M zr%3rn=)>GR`{#zmwD)$3ToLMx++uqsCx(+50Uk*5QJp2c6msxLD&P-y{c|XK6zZl3 z_Fgu8kp|gKVWv`GS!c56FWPO)ZrCCtYh#*yp-ssus)ot>_~UB zyGfjTjz#fXod{^KEQK1~@jN|;SZw5OgH#0wK78Oe4#vV3*|&XPQU z$r~5u8ziT0<#ICrX^<1){mvtaqT9OqlW?wiSu4X#rOC(0uL{Ownb%i1F_G&d>=l51 zx!FEO4_LK+)W^N6UF+fAccyyp{t)TE`;vF@1irbNjcXF8b?yFh zl5UEB>@;wO`~gMF!QB;h<``+f(lxAb_8B$;&vT7)(bXG(7x_5f%AZ5;h#3WjHisX{ zLTSguapAADXMwWZ&jsD0+K!+8#*6z7-(T+QUk>(~!Q|0&!d)PgEw8F6RK;LkB;!HXg79$+l*KU&-fRF|$o+kR4mJ36k9p&>*uS~RhCV+*Y$3U-k%~M)jxCFW zl9;bQ-fx4HPy)*(bhrKL!81M6*@6p5W?z*W`jb;@JKMFwmic{gQPv*) z?I{Fh)y)}(-6uh^I52xKo!LRZV0c*1X)Z(g+GVFN{2n%vD*@&IkVI{R_0;M28M z8vu?M+xVF-&<{l@1g{PA#hnyAq(gudz4WKSFL5YOr3q!|qrxa7z~F~rEJ29VQKgNe z1*L^m9&acg2p7&`u&V%oY|AKF(Xpv=)wf&j#n|;2UYEaUIHLJuTQw$SbrNn+)38PlfV^0<6s>)|hT#IAAS*T)_^_q@I} z0S%tV-HrXOjzkvW!YSbDjdH=g;=4A@whsDB zI8^aX6n=|ab(?!Ay!)CxH(wC(iX~Q@%FEx>C{Hmp98f2ku$Bsw%lk6v50(U@; zu68Z9U&za}O#-Mv^+!V=eyj6S)5oS{My`1MVs)nlnYl_$xU^QId1_jMf7&K8ij)jQ zJ|+~@l)xpV%~Y{P()$`+nBihkjE|3t3t8PoKU3wZ_Eg%0P<>%(A@oW#*8i$X!nfG& z;&&2ZIKlD~*Gff+p3A7QB!}Ei>RGhUUz^UoEpeJ{`2ov>wH!O@1$VW>A#D#{i2z9l z{d)FK9OYxRY#(6NUMO=q^5Ve7R|72%f}ZDlsm0BN&LzyaSHurXV4p5HGf7|Z)}8)g z5J#S6h{-+_U0m$k#+|N{6_8MYactWzWb+1~ea8wX3zX<@O0>pU*q($J{=R&7)P&jg z6Kb)o=HAnC_MP;cIeBq}{gG^0CZzOUJZ|7C-VjE}!?*UtKTcwwF33v^BYC&}Rq)C* zpAJ07-!{`flYX1@n;ZK-=x4)!o(%(1UqulVmes(D z^`_HNfM#umEYy~=zh$9&+?8$4!l(4rr?d#8hS4iks@9w%E4l`BKmhUtvsm1X-mKC3 z>4(u4yS45OgZIOQ;EQ6s`sjNelo!~mLe7gS69TW2WnFwEKcAwioq2mLXV<9CIa#(0`sQpl>vwW`A$D?!2%nt*HEb;Ga=o?92 zHAOICmXHEQ%Cc{m2>dLjPU1J}^w7zilFIxy9nG(OZbYPtW?3KJyv@A7|1A*NiD_v! zTLC}%E4kI*d?$lQBRL==MPsD#FyN0ZSr`;aeQ4C6a2INH9klU~_gCH;G2%8R4EuHb z44Ej^6301>?c06FP3X~xyP{77p`-3td;HKAGf4mZw1qRd6Z^^L#?qaiAKv~px)*jAV^re~beps9m{kJzb6n(oS8uCt#Lnjofg;Rl z=apY)JsV;^dVkzCW)jDrii_WTT`3iKri(xmCC1^AO}Vqt-1B*wwIlBAmE1AmdRtMc zD!fB@mtwHPHyV-^VIVU??*~*{olz-Ub)NCX941BDj_CKZ+QYQ?+``tyhy_7WFXF}_ z?~CVO#LsDYD!&}cph22{PZ*TK?$K^u`E7%{^na89Rm%!jSZs7vI-D zL1POD!1cu56G)*p1gui3-i^JZPX3tI*_Fq&JRwbz*#8LUSiMRWjuu`zD|uk;+X&d@ zuxF5C2{Zp#O?GtOB+R2~tF>MDI(}%p-W=M>1tEY}8E=b_l*WbOO zY9tCPgL3vMEqz)_eWeqmN{qobq_4)XdXJSe6Hj;Eie0??2ZZ?p;*_K8@(&v~1evu- zxQCA2YYvv@qhzamqdi`?{Z{c*7$arCdz4-4G(`O5It%y&8>d{#Y9Vax^FZ99ZK zUdIPpkNhp8uP3T+W4lhvUIYaoY##y6KtxBFoj3&5^@Q(^{677%C#3YJh$p-Ee2M6F ztJAoQv1N0L!|N8XBD(eAYcB#gRaIX7T8U5xXbx~cJSon~YnC zaJYE%zOj9y?E==_B$*9NiAm{~)2Z}t1$$l?qOYct5Ep5HvqFKvuSE7A5YF$K@2>UE zbQOdTNzjD#zS(L>wa2$K-WK!Pc%pY^8To58;^JaXZ}F30wuYl;WWs~rCoo&vrEtUh zTBLMU??yx1#;-weCPZyOJ%Yeb?14z+OXW0L_E+<)(q=;xz74U-Q~R~n*oC;MxyrJo(74r$y2t;x`D~{nhUw`N{Bbc zo`l5kb`Yy;L=&@MTQ~Ml_%V%){mCIj4WC}5q=A_ACx2^by!4w1rVX6H0ifayJsw;; z=+}5kjC?RG*q)^FA;udd?fK$7vU1x>y0w;A-)YbE%l$J%nRRjAIlrItFPgQvJ7Ytb z%HSFnjF2||X&L_g-Q>1{(mholW_-EJmSzsO%*VVVB4)#OAv<(kOIx2H!f)I9#e_Nyjdb$&*1KN^gM}yFIhi%%BWB}7Ke0M{0WY>CxJQUuL<9GW$I>S z8~;QmE{^wS?I`=DyV^l+MozMPWLoFz=uSLu99tiVHdCN>7jRs~vd13`&Gey!!7_+< z6o@25%!eN~+Eki#7iq@#{Hxl7pF0^`N;~p~#tc6HXJP0g5xvK|AuLSwNHVI2_Y-!& z4hemc%vOM5!ySDypyEGe=lAeFbIp`w8FIUcTqUwens>sTIV-jDhrcKGX7XHFXyazb z^DO8=ZgefY6R6&+)c1_i*WoenjtR5@_JU#Ph;4M8fpmznxE9R`=r@-#_y zkD?Muq|*gg7f*BQeI|Np#}Q|NXLJHM6GE{;SJn8ce`V1Gehym~{8c+M<2~=HcCRuk z-v&$8dc8YG+tK}NYVhwdm1iZ&A#r+T<>Ez88)Eq9j+G5h5D(_u{WQdUTOs+QbA(=? z{F6n6UV8D2*lvb)0vDrca$729KG$xO2aH$jWoWl0drlmefYsTswh)`GjMtmR=vEkJ zN$aTp_@@KL%KQ-VDB2ppbZK@X`6cJA5n`g>sbCTvU_xdid!{9gWA|>Mfs6rtHx6s` z_wMt*FgUTBZ@I2C62&zbs?pPvK9TpatkXzqDqe4YTr^nnQg8gWxjKt*s&eOMEp!Qc zG~PT`>xg76Xqh^dKI-Eu#K*VnvEf9qT{L0yNpVj)eVD#kQzGgVRbTB!5nWY=?t!cggiEGBAcWM2xNtW&9 zZB_6RZ}|a87CuEYRYCRJ`Sg+_gBK$_J@*zoWcJJw>eBw?G9WY(Jw~qN|A3MBR^~jm?>k5oGv7z+0jWOox(co@%nya|* zE-2peyX)#@svgwwDMPJ89dT=iO>}@wtNR@NUQ|cJZ};sX(w2uWP4AE5)@A ziJgy_TIZ+T&vG&xPh@Jmt!OJ|zA6C0ZxfF2 z7>aIZqecbmM$lyvDMwg2?Ipo9b)-WL6K_7(X_rmJgdd$-Qc^ywEw4SThChz6*_yu= z{v~a4V|RJtH-GThc2C0Z|JHPl{II-!?B~7cWnRz&dgP*UqoY!iCo&i-xeM}kl?ID* zKTX`w+;z0+MCdGcl{N?xb|tYb%Id=k++k_@(V%bTS&n09`0{S0)|>IH_F;V@_zrxS-dKDDc7+i`nHN8J z;38w69lzAS*WWa+dnVvk(0-KD3%*)TerLH zSCc}Tjc-mR5|1HAL$C1}oue|Qp&M!hmyDUcg)Cz>GXPEyeYf}+s48kIl*pL{{treP BIP(Ai literal 0 HcmV?d00001 diff --git a/module_card_girl/src/main/res/values/colors.xml b/module_card_girl/src/main/res/values/colors.xml new file mode 100644 index 0000000..3ab3e9c --- /dev/null +++ b/module_card_girl/src/main/res/values/colors.xml @@ -0,0 +1,6 @@ + + + #3F51B5 + #303F9F + #FF4081 + diff --git a/module_card_girl/src/main/res/values/dimens.xml b/module_card_girl/src/main/res/values/dimens.xml new file mode 100644 index 0000000..3ba8e54 --- /dev/null +++ b/module_card_girl/src/main/res/values/dimens.xml @@ -0,0 +1,5 @@ + + + 12dp + 65dp + \ No newline at end of file diff --git a/module_card_girl/src/main/res/values/strings.xml b/module_card_girl/src/main/res/values/strings.xml new file mode 100644 index 0000000..7bc50a0 --- /dev/null +++ b/module_card_girl/src/main/res/values/strings.xml @@ -0,0 +1,4 @@ + + Module_Card_Girl + 鍗$墖濂冲 + diff --git a/module_card_girl/src/main/res/values/styles.xml b/module_card_girl/src/main/res/values/styles.xml new file mode 100644 index 0000000..5885930 --- /dev/null +++ b/module_card_girl/src/main/res/values/styles.xml @@ -0,0 +1,11 @@ + + + + + + diff --git a/module_girls/src/main/java/com/guiying/module/girls/main/GirlsPresenter.java b/module_girls/src/main/java/com/guiying/module/girls/main/GirlsPresenter.java index a94fa8b..88e7036 100644 --- a/module_girls/src/main/java/com/guiying/module/girls/main/GirlsPresenter.java +++ b/module_girls/src/main/java/com/guiying/module/girls/main/GirlsPresenter.java @@ -46,6 +46,7 @@ public void onDataNotAvailable() { @Override public void start() { - getGirls(20, 1, true); +// getGirls(20, 1, true); + getGirls(1000, 1, true); } } diff --git a/module_girls/src/main/java/com/guiying/module/girls/main/GirlsView.java b/module_girls/src/main/java/com/guiying/module/girls/main/GirlsView.java index dc83d90..c6b1d79 100644 --- a/module_girls/src/main/java/com/guiying/module/girls/main/GirlsView.java +++ b/module_girls/src/main/java/com/guiying/module/girls/main/GirlsView.java @@ -22,6 +22,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.Random; /** *

绫昏鏄

@@ -114,10 +115,16 @@ public boolean isActive() { @Override public void refresh(List data) { + //========================== add in 2018/7/4 : 涔卞簭data mData.clear(); - mData.addAll(data); + Random random = new Random(); + for (int i = data.size() -1; i >= 0; i--) { + int i1 = random.nextInt(data.size()); + Girls remove = data.remove(i1); + mData.add(remove); + } mAdapter.clear(); - mAdapter.addAll(data); + mAdapter.addAll(mData); } @Override diff --git a/module_main/build.gradle b/module_main/build.gradle index a1838bd..97c5737 100644 --- a/module_main/build.gradle +++ b/module_main/build.gradle @@ -50,4 +50,5 @@ dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) annotationProcessor deps.arouter_compiler implementation project(':lib_common') + implementation project(':module_sample') } diff --git a/module_main/src/main/java/com/guiying/module/main/MainActivity.java b/module_main/src/main/java/com/guiying/module/main/MainActivity.java index db0fb8b..9f57e97 100644 --- a/module_main/src/main/java/com/guiying/module/main/MainActivity.java +++ b/module_main/src/main/java/com/guiying/module/main/MainActivity.java @@ -1,11 +1,15 @@ package com.guiying.module.main; import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; import android.os.Bundle; import android.view.KeyEvent; import android.view.View; +import android.widget.ImageView; import com.alibaba.android.arouter.launcher.ARouter; +import com.example.module_sample.ui.impl.ClipPathActivity; import com.guiying.module.common.base.BaseActivity; import com.guiying.module.common.base.ViewManager; import com.guiying.module.common.utils.ToastUtils; @@ -20,6 +24,7 @@ public class MainActivity extends BaseActivity implements View.OnClickListener { private long mExitTime = 0; + private ImageView imageView; @Override protected void onCreate(Bundle savedInstanceState) { @@ -28,6 +33,18 @@ protected void onCreate(Bundle savedInstanceState) { findViewById(R.id.news_button).setOnClickListener(this); findViewById(R.id.girls_button).setOnClickListener(this); findViewById(R.id.fragment_button).setOnClickListener(this); + + imageView = findViewById(R.id.img); + ImageView imageView2 = findViewById(R.id.img2); + ImageView imageView3 = findViewById(R.id.img3); + + Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.tmp); + Bitmap roundedShape = ClipPathActivity.getRoundedShape(bitmap, 10, 0); + imageView.setImageBitmap(roundedShape); + + Bitmap roundedShape2 = ClipPathActivity.getRoundShapeByXfermode(bitmap, 10); + imageView2.setImageBitmap(roundedShape2); + } @Override diff --git a/module_main/src/main/res/drawable/tmp.png b/module_main/src/main/res/drawable/tmp.png new file mode 100644 index 0000000000000000000000000000000000000000..9552290ab178133a25ba2bc16c381acdd3cf40a7 GIT binary patch literal 39610 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 Qa{vGU07*qoM6N<$f}_Ct$^ZZW literal 0 HcmV?d00001 diff --git a/module_main/src/main/res/layout/activity_main.xml b/module_main/src/main/res/layout/activity_main.xml index c4c16f8..de5574a 100644 --- a/module_main/src/main/res/layout/activity_main.xml +++ b/module_main/src/main/res/layout/activity_main.xml @@ -29,4 +29,24 @@ android:layout_height="wrap_content" android:text="Fragment" /> + + + + + diff --git a/module_sample/.gitignore b/module_sample/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/module_sample/.gitignore @@ -0,0 +1 @@ +/build diff --git a/module_sample/build.gradle b/module_sample/build.gradle new file mode 100644 index 0000000..d404b5a --- /dev/null +++ b/module_sample/build.gradle @@ -0,0 +1,64 @@ +//if(isModule.toBoolean()){ +// apply plugin: 'com.android.application' +//} else { + apply plugin: 'com.android.library' +//} + +android { + compileSdkVersion build_versions.target_sdk + + defaultConfig { + minSdkVersion build_versions.min_sdk + targetSdkVersion build_versions.target_sdk + versionCode 1 + versionName "1.0" + + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + +// javaCompileOptions { +// annotationProcessorOptions { +// arguments = [ moduleName : project.getName()] +// } +// } + + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } +// +// sourceSets { +// main { +// if (isModule.toBoolean()) { +// manifest.srcFile 'src/main/module/AndroidManifest.xml' +// } else { +// manifest.srcFile 'src/main/AndroidManifest.xml' +// //闆嗘垚寮鍙戞ā寮忎笅鎺掗櫎debug鏂囦欢澶逛腑鐨勬墍鏈塉ava鏂囦欢 +// java { +// exclude 'debug/**' +// } +// } +// } +// } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } + +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + +// implementation 'com.android.support:appcompat-v7:27.1.1' +// testImplementation 'junit:junit:4.12' +// androidTestImplementation 'com.android.support.test:runner:1.0.2' +// androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' +// +// annotationProcessor deps.arouter_compiler + implementation project(':lib_common') +} diff --git a/module_sample/proguard-rules.pro b/module_sample/proguard-rules.pro new file mode 100644 index 0000000..f1b4245 --- /dev/null +++ b/module_sample/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# 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 *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/module_sample/src/androidTest/java/com/example/module_sample/ExampleInstrumentedTest.java b/module_sample/src/androidTest/java/com/example/module_sample/ExampleInstrumentedTest.java new file mode 100644 index 0000000..07205c4 --- /dev/null +++ b/module_sample/src/androidTest/java/com/example/module_sample/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.example.module_sample; + +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.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see
Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getTargetContext(); + + assertEquals("com.example.module_sample.test", appContext.getPackageName()); + } +} diff --git a/module_sample/src/main/AndroidManifest.xml b/module_sample/src/main/AndroidManifest.xml new file mode 100644 index 0000000..66e6ac0 --- /dev/null +++ b/module_sample/src/main/AndroidManifest.xml @@ -0,0 +1,2 @@ + diff --git a/module_sample/src/main/java/com/example/module_sample/ui/impl/ClipPathActivity.java b/module_sample/src/main/java/com/example/module_sample/ui/impl/ClipPathActivity.java new file mode 100644 index 0000000..575a987 --- /dev/null +++ b/module_sample/src/main/java/com/example/module_sample/ui/impl/ClipPathActivity.java @@ -0,0 +1,60 @@ +package com.example.module_sample.ui.impl; + +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Path; +import android.graphics.PorterDuff; +import android.graphics.PorterDuffXfermode; +import android.graphics.Rect; +import android.graphics.RectF; + +import com.guiying.module.common.base.BaseActivity; + +/** + * Desc: ClipPath 鐨 ClipPathActivity + * Company: XueHai + * + * @author hc + */ +public class ClipPathActivity extends BaseActivity { + + public static Bitmap getRoundedShape(Bitmap scaleBitmapImage, float radius, int margin){ + //鎸囧畾瀹介珮鐨勭敾甯冿紝 + int targetWidth = scaleBitmapImage.getWidth() - margin; + int targetHeight = scaleBitmapImage.getHeight()- margin; + Bitmap targetBitmap = Bitmap.createBitmap(targetWidth, targetHeight, Bitmap.Config.ARGB_8888); + Canvas canvas = new Canvas(targetBitmap); + //鍦嗚 + Path path = new Path(); + path.addRoundRect(new RectF(margin, margin, targetWidth, targetHeight), radius, radius, Path.Direction.CW); + //鏍稿績鏂规硶锛 clipPath,妯℃澘 + canvas.clipPath(path); + canvas.drawBitmap(scaleBitmapImage, new Rect(0, 0, scaleBitmapImage.getWidth(), scaleBitmapImage.getHeight()), + new Rect(0, 0, targetWidth, targetHeight), null); + return targetBitmap; + } + + public static Bitmap getRoundShapeByXfermode(Bitmap bitmap, int roundPx){ + int width = bitmap.getWidth(); + int height = bitmap.getHeight(); + Bitmap output = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); + Canvas canvas = new Canvas(output); + final int color = 0xff424242; + final Paint paint = new Paint(); + final Rect srcRect = new Rect(0, 0, width, height); + final Rect destRect = new Rect(0, 0, width, height); + final RectF rectF = new RectF(destRect); + paint.setAntiAlias(true);//鎶楅敮榻 + paint.setDither(true);//闃叉姈鍔 + paint.setFilterBitmap(true); + canvas.drawARGB(0, 0,0,0); + paint.setColor(color); + canvas.drawRoundRect(rectF, roundPx, roundPx, paint); + //鏍稿績鏂规硶锛宻etXfermode + paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); + canvas.drawBitmap(bitmap, srcRect, destRect, paint); + return output; + + } +} diff --git a/module_sample/src/main/module/AndroidManifest.xml b/module_sample/src/main/module/AndroidManifest.xml new file mode 100644 index 0000000..68252dc --- /dev/null +++ b/module_sample/src/main/module/AndroidManifest.xml @@ -0,0 +1,4 @@ + + + diff --git a/module_sample/src/main/res/layout/activity_clip_path.xml b/module_sample/src/main/res/layout/activity_clip_path.xml new file mode 100644 index 0000000..e551f7d --- /dev/null +++ b/module_sample/src/main/res/layout/activity_clip_path.xml @@ -0,0 +1,10 @@ + + + + + diff --git a/module_sample/src/main/res/values/strings.xml b/module_sample/src/main/res/values/strings.xml new file mode 100644 index 0000000..68f25ce --- /dev/null +++ b/module_sample/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + module_sample + diff --git a/module_sample/src/test/java/com/example/module_sample/ExampleUnitTest.java b/module_sample/src/test/java/com/example/module_sample/ExampleUnitTest.java new file mode 100644 index 0000000..52c9e78 --- /dev/null +++ b/module_sample/src/test/java/com/example/module_sample/ExampleUnitTest.java @@ -0,0 +1,17 @@ +package com.example.module_sample; + +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Example local unit test, which will execute on the development machine (host). + * + * @see Testing documentation + */ +public class ExampleUnitTest { + @Test + public void addition_isCorrect() { + assertEquals(4, 2 + 2); + } +} \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index 4e334dd..da69ea6 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,4 +1,4 @@ -include ':lib_common', +include ':lib_common', ':module_sample', ':module_card_girl', ':module_app', ':module_main', ':module_girls', diff --git a/versions.gradle b/versions.gradle index 4a8a289..40730fd 100644 --- a/versions.gradle +++ b/versions.gradle @@ -108,7 +108,11 @@ build_versions.target_sdk = 27 build_versions.build_tools = "27.0.2" ext.build_versions = build_versions - +/** + * builder.gradle 鏂囦欢 addRepos(repositories) + * @param handler + * @return + */ def addRepos(RepositoryHandler handler) { handler.google() handler.jcenter() From 8ad7a0e54474a7ae838aa9de872c50c5d3bf437a Mon Sep 17 00:00:00 2001 From: hc <1830560854@qq.com> Date: Wed, 10 Oct 2018 23:54:09 +0800 Subject: [PATCH 02/63] =?UTF-8?q?1.=20=E5=8A=9F=E8=83=BD=E3=80=82=E5=88=A0?= =?UTF-8?q?=E9=99=A4=20sample=20=E6=A8=A1=E5=9D=97=EF=BC=8Cbuild=20?= =?UTF-8?q?=E7=9A=84=E6=97=B6=E5=80=99=E6=8A=A5=E9=94=99=E4=BA=86=202.=20?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E3=80=82=E5=AE=8C=E6=88=90module=5Fmain=20?= =?UTF-8?q?=E8=B7=AF=E7=94=B1=E8=B7=B3=E8=BD=AC=20=E5=A6=B9=E5=AD=90?= =?UTF-8?q?=E5=8D=A1=E7=89=87=E6=A8=A1=E5=9D=97=203.=20=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E3=80=82=E5=AE=9E=E7=8E=B0=E5=91=BD=E4=BB=A4=E8=A1=8C=20clean?= =?UTF-8?q?=20build=20=E6=89=93=E5=8C=85=EF=BC=8C=E5=B9=B6=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=20build->=20doLast=20=E5=91=BD=E4=BB=A4=EF=BC=8C?= =?UTF-8?q?=E6=89=A7=E8=A1=8C=E6=8B=B7=E8=B4=9D=20release=20=E5=8C=85?= =?UTF-8?q?=E5=88=B0=E6=8C=87=E5=AE=9A=E7=9B=AE=E5=BD=95=E5=B9=B6=E9=87=8D?= =?UTF-8?q?=E5=91=BD=E5=90=8D=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gradle.properties | 3 +- keystore.properties | 8 +- lib_common/build.gradle | 8 +- module_app/build.gradle | 59 +++++++ module_card_girl/build.gradle | 8 + module_card_girl/src/main/AndroidManifest.xml | 6 +- .../module_card_girl/CardGirlActivity.java | 2 +- .../cardgirl/ui/impl/CardGirlActivity.java | 20 +-- .../hc/module/cardgirl/data/UserAdapter.java | 109 ------------- .../hc/module/cardgirl/data/bean/Girl.java | 144 ------------------ .../cardgirl/data/bean/GirlsParser.java | 44 ------ .../module/cardgirl/model/ICardGirlModel.java | 20 --- .../cardgirl/model/impl/CardGirlModel.java | 43 ------ .../presenter/ICardGirlPresenter.java | 13 -- .../presenter/impl/CardGirlPresenter.java | 50 ------ .../hc/module/cardgirl/ui/ICardGirlView.java | 24 --- .../module/cardgirl/view/CardImageView.java | 64 -------- .../cardgirl/view/SwipeIndicatorView.java | 77 ---------- .../src/main/module/AndroidManifest.xml | 2 +- .../src/main/res/layout/swipe_fling_item.xml | 6 +- module_girls/build.gradle | 4 + module_main/build.gradle | 5 +- .../com/guiying/module/main/MainActivity.java | 13 +- .../src/main/java/debug/MainApplication.java | 2 +- .../src/main/res/layout/activity_main.xml | 16 +- module_news/build.gradle | 4 + module_sample/.gitignore | 1 - module_sample/build.gradle | 64 -------- module_sample/proguard-rules.pro | 21 --- .../ExampleInstrumentedTest.java | 26 ---- module_sample/src/main/AndroidManifest.xml | 2 - .../ui/impl/ClipPathActivity.java | 60 -------- .../src/main/module/AndroidManifest.xml | 4 - .../main/res/layout/activity_clip_path.xml | 10 -- module_sample/src/main/res/values/strings.xml | 3 - .../module_sample/ExampleUnitTest.java | 17 --- settings.gradle | 2 +- 37 files changed, 120 insertions(+), 844 deletions(-) rename module_card_girl/src/main/java/com/{hc => guiying}/module/cardgirl/ui/impl/CardGirlActivity.java (88%) delete mode 100644 module_card_girl/src/main/java/com/hc/module/cardgirl/data/UserAdapter.java delete mode 100644 module_card_girl/src/main/java/com/hc/module/cardgirl/data/bean/Girl.java delete mode 100644 module_card_girl/src/main/java/com/hc/module/cardgirl/data/bean/GirlsParser.java delete mode 100644 module_card_girl/src/main/java/com/hc/module/cardgirl/model/ICardGirlModel.java delete mode 100644 module_card_girl/src/main/java/com/hc/module/cardgirl/model/impl/CardGirlModel.java delete mode 100644 module_card_girl/src/main/java/com/hc/module/cardgirl/presenter/ICardGirlPresenter.java delete mode 100644 module_card_girl/src/main/java/com/hc/module/cardgirl/presenter/impl/CardGirlPresenter.java delete mode 100644 module_card_girl/src/main/java/com/hc/module/cardgirl/ui/ICardGirlView.java delete mode 100644 module_card_girl/src/main/java/com/hc/module/cardgirl/view/CardImageView.java delete mode 100644 module_card_girl/src/main/java/com/hc/module/cardgirl/view/SwipeIndicatorView.java delete mode 100644 module_sample/.gitignore delete mode 100644 module_sample/build.gradle delete mode 100644 module_sample/proguard-rules.pro delete mode 100644 module_sample/src/androidTest/java/com/example/module_sample/ExampleInstrumentedTest.java delete mode 100644 module_sample/src/main/AndroidManifest.xml delete mode 100644 module_sample/src/main/java/com/example/module_sample/ui/impl/ClipPathActivity.java delete mode 100644 module_sample/src/main/module/AndroidManifest.xml delete mode 100644 module_sample/src/main/res/layout/activity_clip_path.xml delete mode 100644 module_sample/src/main/res/values/strings.xml delete mode 100644 module_sample/src/test/java/com/example/module_sample/ExampleUnitTest.java diff --git a/gradle.properties b/gradle.properties index 3ffa057..63b7074 100644 --- a/gradle.properties +++ b/gradle.properties @@ -24,4 +24,5 @@ localGradlePluginVersion=3.0.1 # 每锟轿革拷锟侥★拷isModule锟斤拷锟斤拷值锟斤拷锟斤拷要锟斤拷锟 "Sync Project" 锟斤拷钮 # isModule锟角★拷锟斤拷锟缴匡拷锟斤拷模式锟斤拷锟酵★拷锟斤拷锟斤拷锟斤拷锟侥J斤拷锟斤拷锟斤拷谢锟斤拷锟斤拷锟 # 缃负true,鍒欏彲鐩存帴杩愯 module_new銆 module_girl 绛 module -isModule=true +isModule=false +PROJECT_NAME = AndroidModulePattern \ No newline at end of file diff --git a/keystore.properties b/keystore.properties index dabd93e..6d68cb4 100644 --- a/keystore.properties +++ b/keystore.properties @@ -1,4 +1,4 @@ -storePassword=guiying712 -keyPassword=guiying712 -keyAlias=guiying712 -storeFile=/mykey.jks \ No newline at end of file +storePassword=123456 +keyPassword=123456 +keyAlias=keyAlias +storeFile=mykey.jks \ No newline at end of file diff --git a/lib_common/build.gradle b/lib_common/build.gradle index 560425e..17bd7bc 100644 --- a/lib_common/build.gradle +++ b/lib_common/build.gradle @@ -26,6 +26,9 @@ android { } } + lintOptions { + abortOnError false + } } dependencies { @@ -60,11 +63,6 @@ dependencies { api deps.utils api deps.glide - // addition - compile 'com.jakewharton:butterknife:8.8.1' - compile 'com.makeramen:roundedimageview:2.2.1' - compile 'com.android.support:cardview-v7:23.2.1' - //view api deps.photo_view api deps.easy_recycler diff --git a/module_app/build.gradle b/module_app/build.gradle index fea51f9..24d324d 100644 --- a/module_app/build.gradle +++ b/module_app/build.gradle @@ -69,6 +69,9 @@ android { } } + lintOptions { + abortOnError false + } } @@ -81,6 +84,62 @@ dependencies { implementation project(':module_main') implementation project(':module_girls') implementation project(':module_news') + implementation project(':module_card_girl') } } + + +project.ext { + projectName = PROJECT_NAME + apkRootDir = "output" + apkName = PROJECT_NAME+".apk" +} + +def buildDay = new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("GMT+8")) +def buildTime = new Date().format("yyyy-MM-dd HH.mm.ss", TimeZone.getTimeZone("GMT+8")) + +build { + doLast { + //褰撳墠鐩綍涓 锛屼笉鍔 / + def outputFile = new File("module_app/build/outputs/apk/release/module_app-release.apk") + def fileP = project.ext.apkRootDir + "/" + buildDay + "/" + project.ext.apkName; + def fileP2 = project.ext.apkRootDir + "/" + buildDay + "/" + project.ext.projectName + "/" + buildTime + ".apk"; + copyToPath(outputFile, fileP) + copyToPath(outputFile, fileP2) + } +} + +def copyToPath(file, path) { + if (file.name.endsWith('.apk')) { + def length = 1024; + println "start: " + file.name + println "path: " + file.getAbsolutePath() + if (!file.exists()) { + return + } + + println "test: " + file.name + + def fin = new FileInputStream(file); + def desFile = new File(path); + def dir = desFile.getParentFile(); + if (!dir.exists()) { + dir.mkdirs() + } + def fout = new FileOutputStream(desFile); + byte[] buffer = new byte[length]; + def ins; + while (true) { + ins = fin.read(buffer); + if (ins == -1) { + fin.close(); + fout.flush(); + fout.close(); + break; + } else { + fout.write(buffer, 0, ins); + } + } + } +} \ No newline at end of file diff --git a/module_card_girl/build.gradle b/module_card_girl/build.gradle index 5da0ba8..7c476b1 100644 --- a/module_card_girl/build.gradle +++ b/module_card_girl/build.gradle @@ -44,12 +44,20 @@ android { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } + + lintOptions { + abortOnError false + } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) annotationProcessor deps.arouter_compiler implementation project(':lib_common') + // addition +// compile 'com.jakewharton:butterknife:8.8.1' + compile 'com.makeramen:roundedimageview:2.2.1' +// compile 'com.android.support:cardview-v7:23.2.1' implementation 'com.github.zhuchen1109:Swipe-cards:18df0b545b' } diff --git a/module_card_girl/src/main/AndroidManifest.xml b/module_card_girl/src/main/AndroidManifest.xml index 6e4148a..bd4e281 100644 --- a/module_card_girl/src/main/AndroidManifest.xml +++ b/module_card_girl/src/main/AndroidManifest.xml @@ -1,10 +1,12 @@ + package="com.guiying.module.cardgirl"> + android:screenOrientation="portrait" > + + diff --git a/module_card_girl/src/main/java/com/example/module_card_girl/CardGirlActivity.java b/module_card_girl/src/main/java/com/example/module_card_girl/CardGirlActivity.java index 7cdda37..fcc6cc3 100644 --- a/module_card_girl/src/main/java/com/example/module_card_girl/CardGirlActivity.java +++ b/module_card_girl/src/main/java/com/example/module_card_girl/CardGirlActivity.java @@ -3,7 +3,7 @@ import android.support.v7.app.AppCompatActivity; import android.os.Bundle; -import com.hc.module.cardgirl.R; +import com.guiying.module.cardgirl.R; public class CardGirlActivity extends AppCompatActivity { diff --git a/module_card_girl/src/main/java/com/hc/module/cardgirl/ui/impl/CardGirlActivity.java b/module_card_girl/src/main/java/com/guiying/module/cardgirl/ui/impl/CardGirlActivity.java similarity index 88% rename from module_card_girl/src/main/java/com/hc/module/cardgirl/ui/impl/CardGirlActivity.java rename to module_card_girl/src/main/java/com/guiying/module/cardgirl/ui/impl/CardGirlActivity.java index d5385df..2667f6f 100644 --- a/module_card_girl/src/main/java/com/hc/module/cardgirl/ui/impl/CardGirlActivity.java +++ b/module_card_girl/src/main/java/com/guiying/module/cardgirl/ui/impl/CardGirlActivity.java @@ -1,24 +1,22 @@ -package com.hc.module.cardgirl.ui.impl; +package com.guiying.module.cardgirl.ui.impl; import android.os.Bundle; import android.view.View; import android.widget.Toast; import com.alibaba.android.arouter.facade.annotation.Route; +import com.guiying.module.cardgirl.R; import com.guiying.module.common.base.BaseActionBarActivity; import com.guiying.module.common.base.BasePresenter; -import com.hc.module.cardgirl.R; -import com.hc.module.cardgirl.data.UserAdapter; -import com.hc.module.cardgirl.data.bean.Girl; -import com.hc.module.cardgirl.presenter.ICardGirlPresenter; -import com.hc.module.cardgirl.presenter.impl.CardGirlPresenter; -import com.hc.module.cardgirl.ui.ICardGirlView; +import com.guiying.module.cardgirl.ui.impl.data.UserAdapter; +import com.guiying.module.cardgirl.ui.impl.data.bean.Girl; +import com.guiying.module.cardgirl.ui.impl.presenter.ICardGirlPresenter; +import com.guiying.module.cardgirl.ui.impl.presenter.impl.CardGirlPresenter; +import com.guiying.module.cardgirl.ui.impl.ui.ICardGirlView; import com.zc.swiple.SwipeFlingView; import java.util.List; -import butterknife.BindView; -import butterknife.ButterKnife; /** * Desc: 鍗$墖濂冲 鐨 CardGirlActivity @@ -29,7 +27,6 @@ @Route(path = "/card_girl/card") public class CardGirlActivity extends BaseActionBarActivity implements ICardGirlView, SwipeFlingView.OnItemClickListener { - @BindView(R.id.layout_swipe_fling) SwipeFlingView mLayoutSwipeFling; private BasePresenter mPresenter; @@ -43,8 +40,7 @@ protected int setTitleId() { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_card_girl); - ButterKnife.bind(this); - mLayoutSwipeFling = ButterKnife.findById(this, R.id.layout_swipe_fling); + mLayoutSwipeFling = this.findViewById(R.id.layout_swipe_fling); mPresenter = new CardGirlPresenter(this); mPresenter.start(); diff --git a/module_card_girl/src/main/java/com/hc/module/cardgirl/data/UserAdapter.java b/module_card_girl/src/main/java/com/hc/module/cardgirl/data/UserAdapter.java deleted file mode 100644 index 23431cb..0000000 --- a/module_card_girl/src/main/java/com/hc/module/cardgirl/data/UserAdapter.java +++ /dev/null @@ -1,109 +0,0 @@ -package com.hc.module.cardgirl.data; - -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.BaseAdapter; -import android.widget.FrameLayout; -import android.widget.TextView; - -import com.bumptech.glide.Glide; -import com.bumptech.glide.load.engine.DiskCacheStrategy; -import com.hc.module.cardgirl.R; -import com.hc.module.cardgirl.data.bean.Girl; -import com.hc.module.cardgirl.view.CardImageView; -import com.hc.module.cardgirl.view.SwipeIndicatorView; - -import java.util.ArrayList; -import java.util.List; - -import butterknife.ButterKnife; - -/** - * Author: hc - * DATE: 2018/10/8 = 涓婂崍11:27 - */ -public class UserAdapter extends BaseAdapter { - - private Context mContext; - private LayoutInflater mInflater; - private List mList; - - public UserAdapter(Context context, List list) { - mInflater = LayoutInflater.from(context); - this.mList = list; - this.mContext = context; - } - - @Override - public int getCount() { - return mList.size(); - } - - @Override - public Object getItem(int position) { - return mList.get(position); - } - - @Override - public long getItemId(int position) { - return mList.get(position).hashCode(); - } - - @Override - public View getView(int position, View convertView, ViewGroup parent) { - if (convertView == null) { - convertView = mInflater.inflate(R.layout.swipe_fling_item, parent, false); - ViewHolder holder = new ViewHolder(convertView); - convertView.setTag(holder); - } - ViewHolder holder = (ViewHolder) convertView.getTag(); - - Girl cardEntity = ((Girl) getItem(position)); - holder.likeIndicator.reset(); - holder.unLikeIndicator.reset(); - holder.nameView.setText(cardEntity.getWho()); - holder.addressView.setText(cardEntity.getDesc()); - holder.img.reset(); - holder.img.setUser(cardEntity); - - if(holder.img != null){ - Glide.with(holder.img.getContext()) - .load(cardEntity.getUrl()) - .diskCacheStrategy(DiskCacheStrategy.NONE) - .into(holder.img); - } - return convertView; - } - - static class ViewHolder { - FrameLayout cardLayout; - CardImageView img; - TextView nameView; - TextView addressView; - SwipeIndicatorView likeIndicator; - SwipeIndicatorView unLikeIndicator; - TextView mFriendCountTv; - TextView mInterestCountTv; - ViewGroup mBottomLayout; - - ViewHolder(View rootView) { - cardLayout = (FrameLayout) rootView; - img = ButterKnife.findById(rootView, R.id.item_img); - nameView = ButterKnife.findById(rootView, R.id.item_name); - addressView = ButterKnife.findById(rootView, R.id.item_address); - likeIndicator = ButterKnife.findById(rootView, R.id.item_swipe_like_indicator); - unLikeIndicator = ButterKnife.findById(rootView, R.id.item_swipe_unlike_indicator); - mFriendCountTv = ButterKnife.findById(rootView, R.id.item_friend_count); - mInterestCountTv = ButterKnife.findById(rootView, R.id.item_interest_count); - mBottomLayout = ButterKnife.findById(rootView, R.id.item_bottom_layout); - } - - @Override - public String toString() { - return "[Card:" + nameView.getText() + "]"; - } - } - -} diff --git a/module_card_girl/src/main/java/com/hc/module/cardgirl/data/bean/Girl.java b/module_card_girl/src/main/java/com/hc/module/cardgirl/data/bean/Girl.java deleted file mode 100644 index 5b32a26..0000000 --- a/module_card_girl/src/main/java/com/hc/module/cardgirl/data/bean/Girl.java +++ /dev/null @@ -1,144 +0,0 @@ -package com.hc.module.cardgirl.data.bean; - -import android.os.Parcel; -import android.os.Parcelable; - -/** - *

绫昏鏄

- * - * @author 寮犲崕娲 2017/2/22 20:51 - * @version V1.2.0 - * @name Girls - */ - - -public class Girl implements Parcelable { - - private String _id; - private String createdAt; - private String desc; - private String publishedAt; - private String source; - private String type; - private String url; - private boolean used; - private String who; - - public void set_id(String _id) { - this._id = _id; - } - - public void setCreatedAt(String createdAt) { - this.createdAt = createdAt; - } - - public void setDesc(String desc) { - this.desc = desc; - } - - public void setPublishedAt(String publishedAt) { - this.publishedAt = publishedAt; - } - - public void setSource(String source) { - this.source = source; - } - - public void setType(String type) { - this.type = type; - } - - public void setUrl(String url) { - this.url = url; - } - - public void setUsed(boolean used) { - this.used = used; - } - - public void setWho(String who) { - this.who = who; - } - - public String get_id() { - return _id; - } - - public String getCreatedAt() { - return createdAt; - } - - public String getDesc() { - return desc; - } - - public String getPublishedAt() { - return publishedAt; - } - - public String getSource() { - return source; - } - - public String getType() { - return type; - } - - public String getUrl() { - return url; - } - - public boolean isUsed() { - return used; - } - - public String getWho() { - return who; - } - - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - dest.writeString(this._id); - dest.writeString(this.createdAt); - dest.writeString(this.desc); - dest.writeString(this.publishedAt); - dest.writeString(this.source); - dest.writeString(this.type); - dest.writeString(this.url); - dest.writeByte(this.used ? (byte) 1 : (byte) 0); - dest.writeString(this.who); - } - - public Girl() { - } - - protected Girl(Parcel in) { - this._id = in.readString(); - this.createdAt = in.readString(); - this.desc = in.readString(); - this.publishedAt = in.readString(); - this.source = in.readString(); - this.type = in.readString(); - this.url = in.readString(); - this.used = in.readByte() != 0; - this.who = in.readString(); - } - - public static final Creator CREATOR = new Creator() { - @Override - public Girl createFromParcel(Parcel source) { - return new Girl(source); - } - - @Override - public Girl[] newArray(int size) { - return new Girl[size]; - } - }; -} diff --git a/module_card_girl/src/main/java/com/hc/module/cardgirl/data/bean/GirlsParser.java b/module_card_girl/src/main/java/com/hc/module/cardgirl/data/bean/GirlsParser.java deleted file mode 100644 index c7aa2f9..0000000 --- a/module_card_girl/src/main/java/com/hc/module/cardgirl/data/bean/GirlsParser.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.hc.module.cardgirl.data.bean; - -import java.util.List; - -public class GirlsParser { - - /** - * error : false - * results : [{"_id":"5771d5eb421aa931ddcc50d6","createdAt":"2016-06-28T09:42:03.761Z","desc":"Dagger2鍥炬枃瀹屽叏鏁欑▼","publishedAt":"2016-06-28T11:33:25.276Z","source":"web","type":"Android","url":"https://github.com/luxiaoming/dagger2Demo","used":true,"who":"浠g爜GG闄嗘檽鏄"},{"_id":"5771c9ca421aa931ca5a7e59","createdAt":"2016-06-28T08:50:18.731Z","desc":"Android Design 璁捐妯℃澘","publishedAt":"2016-06-28T11:33:25.276Z","source":"chrome","type":"Android","url":"https://github.com/andreasschrade/android-design-template","used":true,"who":"浠g爜瀹"}] - */ - - private boolean error; - /** - * _id : 5771d5eb421aa931ddcc50d6 - * createdAt : 2016-06-28T09:42:03.761Z - * desc : Dagger2鍥炬枃瀹屽叏鏁欑▼ - * publishedAt : 2016-06-28T11:33:25.276Z - * source : web - * type : Android - * url : https://github.com/luxiaoming/dagger2Demo - * used : true - * who : 浠g爜GG闄嗘檽鏄 - */ - - private List results; - - public void setError(boolean error) { - this.error = error; - } - - public void setResults(List results) { - this.results = results; - } - - public boolean isError() { - return error; - } - - public List getResults() { - return results; - } - - -} diff --git a/module_card_girl/src/main/java/com/hc/module/cardgirl/model/ICardGirlModel.java b/module_card_girl/src/main/java/com/hc/module/cardgirl/model/ICardGirlModel.java deleted file mode 100644 index 152a60f..0000000 --- a/module_card_girl/src/main/java/com/hc/module/cardgirl/model/ICardGirlModel.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.hc.module.cardgirl.model; - -import com.hc.module.cardgirl.data.bean.GirlsParser; - -/** - * Desc: 鍗$墖濂冲 鐨 ICardGirlModel - * Company: XueHai - * - * @author hc - */ -public interface ICardGirlModel { - - void getGirls(int size, int page, LoadGirlsCallback loadGirlsCallback); - - public interface LoadGirlsCallback { - void onGirlsLoaded(GirlsParser girlsParser); - - void onDataNotAvailable(); - } -} diff --git a/module_card_girl/src/main/java/com/hc/module/cardgirl/model/impl/CardGirlModel.java b/module_card_girl/src/main/java/com/hc/module/cardgirl/model/impl/CardGirlModel.java deleted file mode 100644 index 555dc5c..0000000 --- a/module_card_girl/src/main/java/com/hc/module/cardgirl/model/impl/CardGirlModel.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.hc.module.cardgirl.model.impl; - -import com.guiying.module.common.http.DataType; -import com.guiying.module.common.http.HttpClient; -import com.guiying.module.common.http.OnResultListener; -import com.hc.module.cardgirl.data.bean.GirlsParser; -import com.hc.module.cardgirl.model.ICardGirlModel; - -/** - * Desc: 鍗$墖濂冲 鐨 CardGirlModel - * Company: XueHai - * - * @author hc - */ -public class CardGirlModel implements ICardGirlModel { - String GAN_HUO_API = "http://gank.io/api/data/"; - - @Override - public void getGirls(int size, int page, LoadGirlsCallback callback) { - HttpClient client = new HttpClient.Builder() - .baseUrl(GAN_HUO_API) - .url("绂忓埄/" + size + "/" + page) - .bodyType(DataType.JSON_OBJECT, GirlsParser.class) - .build(); - client.get(new OnResultListener() { - - @Override - public void onSuccess(GirlsParser result) { - callback.onGirlsLoaded(result); - } - - @Override - public void onError(int code, String message) { - callback.onDataNotAvailable(); - } - - @Override - public void onFailure(String message) { - callback.onDataNotAvailable(); - } - }); - } -} diff --git a/module_card_girl/src/main/java/com/hc/module/cardgirl/presenter/ICardGirlPresenter.java b/module_card_girl/src/main/java/com/hc/module/cardgirl/presenter/ICardGirlPresenter.java deleted file mode 100644 index ccdaf12..0000000 --- a/module_card_girl/src/main/java/com/hc/module/cardgirl/presenter/ICardGirlPresenter.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.hc.module.cardgirl.presenter; - -import com.guiying.module.common.base.BasePresenter; - -/** - * Desc: 鍗$墖濂冲 鐨 ICardGirlPresenter - * Company: XueHai - * - * @author hc - */ -public interface ICardGirlPresenter extends BasePresenter { - void getGirls(int page, int size, boolean isRefresh); -} diff --git a/module_card_girl/src/main/java/com/hc/module/cardgirl/presenter/impl/CardGirlPresenter.java b/module_card_girl/src/main/java/com/hc/module/cardgirl/presenter/impl/CardGirlPresenter.java deleted file mode 100644 index 661191c..0000000 --- a/module_card_girl/src/main/java/com/hc/module/cardgirl/presenter/impl/CardGirlPresenter.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.hc.module.cardgirl.presenter.impl; - -import com.hc.module.cardgirl.data.bean.GirlsParser; -import com.hc.module.cardgirl.model.ICardGirlModel; -import com.hc.module.cardgirl.model.impl.CardGirlModel; -import com.hc.module.cardgirl.presenter.ICardGirlPresenter; -import com.hc.module.cardgirl.ui.ICardGirlView; - -/** - * Desc: 鍗$墖濂冲 鐨 CardGirlPresenter - * Company: XueHai - * - * @author hc - */ -public class CardGirlPresenter implements ICardGirlPresenter { - private ICardGirlView mView; - private ICardGirlModel mCardGirlModel; - - public CardGirlPresenter(ICardGirlView iCardGirlView) { - this.mView = iCardGirlView; - this.mCardGirlModel = new CardGirlModel(); - } - - @Override - public void getGirls(int page, int size, boolean isRefresh) { - mCardGirlModel.getGirls(size, page, new ICardGirlModel.LoadGirlsCallback() { - @Override - public void onGirlsLoaded(GirlsParser girlsParser) { - if (isRefresh) { - mView.refresh(girlsParser.getResults()); - } else { - mView.load(girlsParser.getResults()); - } - mView.showNormal(); - } - - @Override - public void onDataNotAvailable() { - if (isRefresh) { - mView.showError(); - } - } - }); - } - - @Override - public void start() { - getGirls(1, 100, true); - } -} diff --git a/module_card_girl/src/main/java/com/hc/module/cardgirl/ui/ICardGirlView.java b/module_card_girl/src/main/java/com/hc/module/cardgirl/ui/ICardGirlView.java deleted file mode 100644 index 343707a..0000000 --- a/module_card_girl/src/main/java/com/hc/module/cardgirl/ui/ICardGirlView.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.hc.module.cardgirl.ui; - - -import com.guiying.module.common.base.BaseView; -import com.hc.module.cardgirl.data.bean.Girl; -import com.hc.module.cardgirl.presenter.ICardGirlPresenter; - -import java.util.List; - -/** - * Desc: 鍗$墖濂冲 鐨 ICardGirlView - * Company: XueHai - * - * @author hc - */ -public interface ICardGirlView extends BaseView { - void refresh(List data); - - void load(List data); - - void showError(); - - void showNormal(); -} diff --git a/module_card_girl/src/main/java/com/hc/module/cardgirl/view/CardImageView.java b/module_card_girl/src/main/java/com/hc/module/cardgirl/view/CardImageView.java deleted file mode 100644 index 68334cc..0000000 --- a/module_card_girl/src/main/java/com/hc/module/cardgirl/view/CardImageView.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.hc.module.cardgirl.view; - -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.drawable.Drawable; -import android.util.AttributeSet; - -import com.bumptech.glide.load.resource.bitmap.GlideBitmapDrawable; -import com.hc.module.cardgirl.data.bean.Girl; -import com.makeramen.roundedimageview.RoundedDrawable; -import com.makeramen.roundedimageview.RoundedImageView; - -/** - * Author: hc - * DATE: 2018/10/8 = 涓嬪崍2:00 - */ -public class CardImageView extends RoundedImageView { - private Girl mUser; - private boolean isLoadImgSucc = false; - - public CardImageView(Context context) { - super(context); - } - - public CardImageView(Context context, AttributeSet attrs) { - super(context, attrs); - } - - @Override - public void setImageDrawable(Drawable drawable) { - Drawable tempDrawable = drawable; - if (drawable instanceof GlideBitmapDrawable) { - isLoadImgSucc = true; - /*if (mUser != null) { - mUser.setEndLoadTimeAnchor(); - }*/ - tempDrawable = new RoundedDrawable(((GlideBitmapDrawable) drawable).getBitmap()); - } - super.setImageDrawable(tempDrawable); - } - - @Override - public void setImageBitmap(Bitmap bm) { - super.setImageBitmap(bm); - /*if (GraphicsUtils.isValidBitmap(bm)) { - isLoadImgSucc = true; - if (mUser != null) { - mUser.setEndLoadTimeAnchor(); - } - }*/ - } - - public void setUser(Girl user) { - this.mUser = user; - } - - public void reset() { - isLoadImgSucc = false; - } - - public boolean isLoadImgSucc() { - return isLoadImgSucc; - } -} diff --git a/module_card_girl/src/main/java/com/hc/module/cardgirl/view/SwipeIndicatorView.java b/module_card_girl/src/main/java/com/hc/module/cardgirl/view/SwipeIndicatorView.java deleted file mode 100644 index 1c19525..0000000 --- a/module_card_girl/src/main/java/com/hc/module/cardgirl/view/SwipeIndicatorView.java +++ /dev/null @@ -1,77 +0,0 @@ -package com.hc.module.cardgirl.view; - -import android.annotation.TargetApi; -import android.content.Context; -import android.os.Build; -import android.util.AttributeSet; -import android.view.View; -import android.widget.ImageView; - -/** swipe fling view璺熸墜婊戝姩鏃讹紝like/unlike鐨剉iew - * Author: hc - * DATE: 2018/10/8 = 涓嬪崍2:03 - */ -public class SwipeIndicatorView extends android.support.v7.widget.AppCompatImageView { - private float mCurPercent = -100.f;//褰撳墠璁剧疆鐨刟lpha鍊 - - public SwipeIndicatorView(Context context) { - this(context, null); - } - - public SwipeIndicatorView(Context context, AttributeSet attrs) { - this(context, attrs, 0); - } - - public SwipeIndicatorView(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - init(context); - } - - private void init(Context context) { - - } - - public void setProgressPercent(float scrollProgressPercent) { - if (mCurPercent == scrollProgressPercent) { - return; - } - this.mCurPercent = scrollProgressPercent; - if (getVisibility() != View.VISIBLE) { - setVisibility(View.VISIBLE); - } - - /*int newImgRes = scrollProgressPercent < 0 ? mUnLikeRes : mLikeRes; - if (newImgRes != mCurImgRes) { - mCurImgRes = newImgRes; - setImageResource(newImgRes); - }*/ - - float absPer = Math.abs(scrollProgressPercent); - int alpha = (int) (0xFF * absPer); - setImageViewAlpha(this, alpha); - } - - public void reset() { - setProgressPercent(0.f); - setVisibility(View.INVISIBLE); - } - - @Override - public boolean hasOverlappingRendering() { - return false; - } - - @Override - protected boolean onSetAlpha(int alpha) { - return true; - } - - @TargetApi(Build.VERSION_CODES.JELLY_BEAN) - public static void setImageViewAlpha(ImageView view, int alpha) { - if (Build.VERSION.SDK_INT >= 16) { - view.setImageAlpha(alpha); - } else { - view.setAlpha(alpha); - } - } -} diff --git a/module_card_girl/src/main/module/AndroidManifest.xml b/module_card_girl/src/main/module/AndroidManifest.xml index 2d5070e..b4966d7 100644 --- a/module_card_girl/src/main/module/AndroidManifest.xml +++ b/module_card_girl/src/main/module/AndroidManifest.xml @@ -1,6 +1,6 @@ + package="com.guiying.module.cardgirl"> - - - +