[
  {
    "path": ".gitignore",
    "content": "*.iml\n.gradle\n/local.properties\n/.idea/workspace.xml\n/.idea/libraries\n.DS_Store\n/build\n/captures\n.externalNativeBuild\n"
  },
  {
    "path": ".idea/gradle.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"GradleSettings\">\n    <option name=\"linkedExternalProjectsSettings\">\n      <GradleProjectSettings>\n        <option name=\"distributionType\" value=\"DEFAULT_WRAPPED\" />\n        <option name=\"externalProjectPath\" value=\"$PROJECT_DIR$\" />\n        <option name=\"modules\">\n          <set>\n            <option value=\"$PROJECT_DIR$\" />\n            <option value=\"$PROJECT_DIR$/app\" />\n          </set>\n        </option>\n        <option name=\"resolveModulePerSourceSet\" value=\"false\" />\n      </GradleProjectSettings>\n    </option>\n  </component>\n</project>"
  },
  {
    "path": ".idea/misc.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"NullableNotNullManager\">\n    <option name=\"myDefaultNullable\" value=\"android.support.annotation.Nullable\" />\n    <option name=\"myDefaultNotNull\" value=\"android.support.annotation.NonNull\" />\n    <option name=\"myNullables\">\n      <value>\n        <list size=\"4\">\n          <item index=\"0\" class=\"java.lang.String\" itemvalue=\"org.jetbrains.annotations.Nullable\" />\n          <item index=\"1\" class=\"java.lang.String\" itemvalue=\"javax.annotation.Nullable\" />\n          <item index=\"2\" class=\"java.lang.String\" itemvalue=\"edu.umd.cs.findbugs.annotations.Nullable\" />\n          <item index=\"3\" class=\"java.lang.String\" itemvalue=\"android.support.annotation.Nullable\" />\n        </list>\n      </value>\n    </option>\n    <option name=\"myNotNulls\">\n      <value>\n        <list size=\"4\">\n          <item index=\"0\" class=\"java.lang.String\" itemvalue=\"org.jetbrains.annotations.NotNull\" />\n          <item index=\"1\" class=\"java.lang.String\" itemvalue=\"javax.annotation.Nonnull\" />\n          <item index=\"2\" class=\"java.lang.String\" itemvalue=\"edu.umd.cs.findbugs.annotations.NonNull\" />\n          <item index=\"3\" class=\"java.lang.String\" itemvalue=\"android.support.annotation.NonNull\" />\n        </list>\n      </value>\n    </option>\n  </component>\n  <component name=\"ProjectRootManager\" version=\"2\" languageLevel=\"JDK_1_7\" project-jdk-name=\"1.8\" project-jdk-type=\"JavaSDK\">\n    <output url=\"file://$PROJECT_DIR$/build/classes\" />\n  </component>\n  <component name=\"ProjectType\">\n    <option name=\"id\" value=\"Android\" />\n  </component>\n</project>"
  },
  {
    "path": ".idea/modules.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"ProjectModuleManager\">\n    <modules>\n      <module fileurl=\"file://$PROJECT_DIR$/app/app.iml\" filepath=\"$PROJECT_DIR$/app/app.iml\" />\n      <module fileurl=\"file://$PROJECT_DIR$/behaviorlearn.iml\" filepath=\"$PROJECT_DIR$/behaviorlearn.iml\" />\n    </modules>\n  </component>\n</project>"
  },
  {
    "path": ".idea/runConfigurations.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"RunConfigurationProducerService\">\n    <option name=\"ignoredProducers\">\n      <set>\n        <option value=\"org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer\" />\n        <option value=\"org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer\" />\n        <option value=\"org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer\" />\n      </set>\n    </option>\n  </component>\n</project>"
  },
  {
    "path": ".idea/vcs.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"VcsDirectoryMappings\">\n    <mapping directory=\"$PROJECT_DIR$\" vcs=\"Git\" />\n  </component>\n</project>"
  },
  {
    "path": "README.md",
    "content": "# behavior-learn\n该项目是为了练习-> 使用`CoordinatorLayout.Behavior` 实现页面复杂联动效果\n代码模仿实现美团商家详情界面内容联动\n\n![](https://github.com/iielse/behavior-learn/blob/master/preview2.gif)\n\n\n[download apk](https://github.com/iielse/behavior-learn/blob/master/app-behavior.apk)\n\n开发使用知识点顺带涉及到：\n1. Scroller+Handler 实现View自动滑动\n2. View属性动画\n3. 触摸事件分发机制\n4. ConstraintLayout约束布局\n\nemmmmmmm 继续加油咯~\n"
  },
  {
    "path": "app/.gitignore",
    "content": "/build\n"
  },
  {
    "path": "app/build.gradle",
    "content": "apply plugin: 'com.android.application'\napply plugin: 'kotlin-android'\napply plugin: 'kotlin-android-extensions'\n\nandroid {\n    compileSdkVersion COMPILE_SDK_VERSION as int\n    buildToolsVersion ANDROID_SUPPORT_VERSION\n    defaultConfig {\n        applicationId APPLICATION_ID\n        minSdkVersion MIN_SDK_VERSION as int\n        targetSdkVersion TARGET_SDK_VERSION as int\n        versionCode VERSION_CODE as int\n        versionName VERSION_NAME\n        flavorDimensions VERSION_CODE\n\n        multiDexEnabled true\n\n        ndk {\n            abiFilters 'armeabi'\n        }\n    }\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'\n        }\n    }\n    sourceSets {\n        main.jniLibs.srcDirs = ['libs']\n    }\n    lintOptions {\n        abortOnError false\n    }\n    packagingOptions {\n        exclude 'META-INF/DEPENDENCIES.txt'\n        exclude 'META-INF/LICENSE.txt'\n        exclude 'META-INF/NOTICE.txt'\n        exclude 'META-INF/NOTICE'\n        exclude 'META-INF/LICENSE'\n        exclude 'META-INF/DEPENDENCIES'\n        exclude 'META-INF/notice.txt'\n        exclude 'META-INF/license.txt'\n        exclude 'META-INF/dependencies.txt'\n        exclude 'META-INF/LGPL2.1'\n    }\n}\n\ndependencies {\n    implementation rootProject.ext.support_multidex\n    implementation rootProject.ext.support_support_v4\n    implementation rootProject.ext.support_appcompat_v7\n    implementation rootProject.ext.support_recyclerview_v7\n    implementation rootProject.ext.support_design\n    implementation 'com.android.support.constraint:constraint-layout:1.1.1'\n    implementation rootProject.ext.kotlin\n    implementation rootProject.ext.kotlin_stdlib\n    implementation rootProject.ext.kotlin_anko_common\n    implementation rootProject.ext.glide\n    annotationProcessor rootProject.ext.glide_compiler\n    implementation rootProject.ext.glide_transformations\n    implementation rootProject.ext.list_pull_to_refresh\n    implementation rootProject.ext.list_adapter\n    implementation rootProject.ext.eventbus\n\n    implementation files('libs/overscroll-release-v1.1-20160904.jar')\n    implementation 'com.oushangfeng:PinnedSectionItemDecoration:1.2.4'\n    implementation 'com.ogaclejapan.smarttablayout:library:1.6.1@aar'\n    implementation 'com.hyman:flowlayout-lib:1.1.1'\n}\nrepositories {\n    mavenCentral()\n    flatDir { dirs 'libs' }\n}\n"
  },
  {
    "path": "app/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile\n"
  },
  {
    "path": "app/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.example.learn\">\n\n    <application xmlns:tools=\"http://schemas.android.com/tools\"\n        android:name=\".App\"\n        android:allowBackup=\"false\"\n        android:icon=\"@mipmap/ic_launcher\"\n        android:label=\"@string/app_name\"\n        android:roundIcon=\"@mipmap/ic_launcher_round\"\n        android:supportsRtl=\"true\"\n        android:theme=\"@style/AppTheme\"\n        tools:replace=\"android:allowBackup\">\n        <activity\n            android:name=\".business.MerchantActivity\"\n            android:screenOrientation=\"portrait\">\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\" />\n\n                <category android:name=\"android.intent.category.LAUNCHER\" />\n            </intent-filter>\n        </activity>\n    </application>\n\n</manifest>"
  },
  {
    "path": "app/src/main/java/com/example/learn/App.kt",
    "content": "package com.example.learn\n\nimport android.app.Application\nimport android.content.Context\nimport android.support.multidex.MultiDex\n\nclass App : Application() {\n    override fun attachBaseContext(base: Context) {\n        super.attachBaseContext(base)\n        MultiDex.install(this)\n    }\n\n    override fun onCreate() {\n        super.onCreate()\n        INSTANCE = this\n    }\n\n    companion object {\n        private var INSTANCE: App? = null\n\n        @Synchronized\n        fun get(): App = INSTANCE!!\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/example/learn/BaseActivity.kt",
    "content": "package com.example.learn\n\nimport android.annotation.SuppressLint\nimport android.support.v7.app.AppCompatActivity\n\n@SuppressLint(\"Registered\")\nopen class BaseActivity : AppCompatActivity()"
  },
  {
    "path": "app/src/main/java/com/example/learn/Bus.kt",
    "content": "package com.example.learn\n\n\nobject Bus {\n    private var EVENT_ID_PRODUCER = 1\n    val FOOD_TOP_HEIGHT = EVENT_ID_PRODUCER++\n    val FOOD_RECOMMEND_HEIGHT = EVENT_ID_PRODUCER++\n}\n\n"
  },
  {
    "path": "app/src/main/java/com/example/learn/BusEvent.kt",
    "content": "package com.example.learn\n\nclass BusEvent {\n    constructor(a: Int) {\n        act = a\n    }\n\n    constructor(a: Int, o: Any) : this(a) {\n        obj = o\n    }\n\n    constructor(a: Int, o: Any, o2: Any) : this(a, o) {\n        obj2 = o2\n    }\n\n    constructor(a: Int, o: Any, o2: Any, o3: Any) : this(a, o, o2) {\n        obj3 = o3\n    }\n\n    var act: Int = 0\n    var obj: Any? = null\n    var obj2: Any? = null\n    var obj3: Any? = null\n}"
  },
  {
    "path": "app/src/main/java/com/example/learn/Candy.kt",
    "content": "package com.example.learn\n\nimport android.annotation.SuppressLint\nimport android.app.Activity\nimport android.content.Context\nimport android.content.ContextWrapper\nimport android.graphics.drawable.Drawable\nimport android.net.Uri\nimport android.os.Handler\nimport android.os.Looper\nimport android.support.v4.app.FragmentActivity\nimport android.support.v4.content.ContextCompat\nimport android.util.DisplayMetrics\nimport android.util.Log\nimport android.view.View\nimport android.view.WindowManager\nimport android.view.animation.AnimationUtils\nimport android.widget.ImageView\nimport android.widget.TextView\nimport android.widget.Toast\nimport com.bumptech.glide.Glide\nimport com.bumptech.glide.Priority\nimport com.bumptech.glide.load.MultiTransformation\nimport com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions\nimport com.bumptech.glide.request.RequestOptions\nimport jp.wasabeef.glide.transformations.BitmapTransformation\nimport org.greenrobot.eventbus.EventBus\n\nval dispatcher = Handler(Looper.getMainLooper())\nval crossFade = DrawableTransitionOptions().crossFade(200)\nval centerCrop = RequestOptions().centerCrop().placeholder(android.R.color.transparent).priority(Priority.NORMAL)\nval argbEvaluator = android.animation.ArgbEvaluator()\n\nfun ImageView?.load(res: Any?, transform: List<BitmapTransformation>? = null) {\n    if (this == null) return\n    context.activity()?.let {\n        val requestOptions = if (transform != null) RequestOptions.bitmapTransform(MultiTransformation(transform)) else centerCrop\n        Glide.with(it).load(when (res) {\n            is Int?, is String?, is Uri?, is Drawable? -> res\n            else -> throw IllegalArgumentException(\"imageView load un support res type\")\n        }).apply(requestOptions).transition(crossFade).into(this)\n    }\n}\n\nfun TextView?.text(res: Any?) {\n    if (this == null) return\n    text = when (res) {\n        is Int -> resString(res)\n        is String -> res\n        else -> throw IllegalArgumentException(\"imageView load un support res type\")\n    }\n}\n\n\nfun Context?.activity(): Activity? {\n    if (this == null) return null\n    if (this.javaClass.name.contains(\"com.android.internal.policy.DecorContext\")) {\n        try {\n            val field = this.javaClass.getDeclaredField(\"mPhoneWindow\")\n            field.isAccessible = true\n            val obj = field.get(this)\n            val m1 = obj.javaClass.getMethod(\"getContext\")\n            return (m1.invoke(obj)) as Activity\n        } catch (e: Exception) {\n            e.printStackTrace()\n        }\n    }\n\n    var context = this\n    while (context is ContextWrapper) {\n        if (context is Activity) {\n            return context\n        }\n        context = context.baseContext\n    }\n    return null\n}\n\nfun View?.activity(): Activity? {\n    if (this == null) return null\n    return context.activity()\n}\n\nfun Activity?.v4(): FragmentActivity? {\n    if (this == null) return null\n    return this as? FragmentActivity\n}\n\nfun Any.resDrawable(drawableRes: Int, scale: Float = 1F): Drawable =\n        ContextCompat.getDrawable(App.get(), drawableRes)!!.apply {\n            setBounds(0, 0, (minimumWidth * scale).toInt(), (minimumHeight * scale).toInt())\n        }\n\nfun Any.resString(stringRes: Int): String = App.get().getString(stringRes)\nfun Any.resDimension(dimensionRes: Int): Int = App.get().resources.getDimensionPixelSize(dimensionRes)\n\nfun Any.dp(dp: Int): Int {\n    val dm = DisplayMetrics()\n    (App.get().getSystemService(Context.WINDOW_SERVICE) as WindowManager)\n            .defaultDisplay.getMetrics(dm)\n    return (dp * dm.density + 0.5f).toInt()\n}\n\nfun Any.screenWidth(): Int {\n    val dm = DisplayMetrics()\n    (App.get().getSystemService(Context.WINDOW_SERVICE) as WindowManager)\n            .defaultDisplay.getMetrics(dm)\n    return dm.widthPixels\n}\n\nfun Any.screenHeight(): Int {\n    val dm = DisplayMetrics()\n    (App.get().getSystemService(Context.WINDOW_SERVICE) as WindowManager)\n            .defaultDisplay.getMetrics(dm)\n    return dm.heightPixels\n}\n\n@SuppressLint(\"PrivateApi\")\nfun Any.statusBarHeight(): Int {\n    var statusHeight = -1\n    try {\n        val clazz = Class.forName(\"com.android.internal.R\\$dimen\")\n        val `object` = clazz.newInstance()\n        val height = Integer.parseInt(clazz.getField(\"status_bar_height\").get(`object`).toString())\n        statusHeight = App.get().resources.getDimensionPixelSize(height)\n    } catch (e: Exception) {\n        e.printStackTrace()\n    }\n    return statusHeight\n}\n\nfun Any.toast(content: String) {\n    Toast.makeText(App.get(), content, Toast.LENGTH_SHORT).show()\n}\n\nfun Activity.postDelayed1(r: Runnable, delayMillis: Long = 0) {\n    dispatcher.postDelayed({\n        if (isFinishing) return@postDelayed\n        r.run()\n    }, delayMillis)\n}\n\nfun View.postDelayed1(r: Runnable, delayMillis: Long = 0) {\n    activity()?.postDelayed1(r, delayMillis)\n}\n\nfun Any.log(content: String, lv: Int = Log.DEBUG) {\n    when (lv) {\n        Log.DEBUG -> Log.d(\"candy\", content)\n        Log.ERROR -> Log.e(\"candy\", content)\n    }\n}\n\nfun Any.postEvent(a: Int, o: Any? = null, o2: Any? = null, o3: Any? = null) {\n    when {\n        o != null && o2 != null && o3 != null -> EventBus.getDefault().post(BusEvent(a, o, o2, o3))\n        o != null && o2 != null -> EventBus.getDefault().post(BusEvent(a, o, o2))\n        o != null -> EventBus.getDefault().post(BusEvent(a, o))\n        else -> EventBus.getDefault().post(BusEvent(a))\n    }\n}\n\nfun View.anim(animRes: Int, visible: Int = View.VISIBLE) {\n    if (visibility != visible) {\n        visibility = visible\n        startAnimation(AnimationUtils.loadAnimation(App.get(), animRes))\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/example/learn/Data.kt",
    "content": "package com.example.learn\n\nimport com.chad.library.adapter.base.entity.MultiItemEntity\nimport com.example.learn.business.*\n\nobject Data {\n    fun foodDetails(): List<MultiItemEntity> {\n        return listOf(\n                FoodTop(),\n                FoodRecommend(foodRecommends()),\n                FoodCover(R.mipmap.pic1),\n                FoodCover(R.mipmap.pic2),\n                FoodCover(R.mipmap.pic3),\n                FoodTitle(\"热销\"),\n                FoodContent(\"皮蛋瘦肉粥\", R.mipmap.pic4, \"皮蛋瘦肉粥是非常受欢迎的粥，其中骚处自行体会..\", 16F),\n                FoodContent(\"香菇瘦肉粥\", R.mipmap.pic5, \"对于吃货来说：治愈系没事，不过一碗热腾腾的粥\", 16F),\n                FoodContent(\"红枣桂圆粥\", R.mipmap.pic6, \"对于吃货来说：治愈系没事，不过一碗热腾腾的粥\", 16F),\n                FoodTitle(\"养颜甜粥\"),\n\n                FoodContent(\"小米南瓜粥\", R.mipmap.pic7, \"对于吃货来说：治愈系没事，不过一碗热腾腾的粥\", 14F),\n                FoodContent(\"清火绿豆粥\", R.mipmap.pic8, \"对于吃货来说：治愈系没事，不过一碗热腾腾的粥\", 14F),\n                FoodContent(\"红心地瓜粥\", R.mipmap.pic9, \"对于吃货来说：治愈系没事，不过一碗热腾腾的粥\", 14F),\n                FoodContent(\"紫薯黑米粥\", R.mipmap.pic10, \"对于吃货来说：治愈系没事，不过一碗热腾腾的粥\", 16F),\n                FoodContent(\"红枣桂圆粥\", R.mipmap.pic6, \"对于吃货来说：治愈系没事，不过一碗热腾腾的粥\", 16F),\n                FoodContent(\"柠檬八宝粥\", R.mipmap.pic11, \"对于吃货来说：治愈系没事，不过一碗热腾腾的粥\", 17F),\n                FoodTitle(\"营养水果粥\"),\n                FoodContent(\"苹果雪梨粥\", R.mipmap.pic12, \"对于吃货来说：治愈系没事，不过一碗热腾腾的粥\", 16F),\n                FoodContent(\"香蕉苹果粥\", R.mipmap.pic13, \"对于吃货来说：治愈系没事，不过一碗热腾腾的粥\", 16F),\n                FoodContent(\"香蕉雪梨粥\", R.mipmap.pic14, \"对于吃货来说：治愈系没事，不过一碗热腾腾的粥\", 16F)\n        )\n    }\n\n    fun foodMenus(): List<FoodTitle> {\n        return listOf(\n                FoodTitle(\"进店须知\"),\n                FoodTitle(\"热销\"),\n                FoodTitle(\"养颜甜粥\"),\n                FoodTitle(\"营养水果粥\")\n        )\n    }\n\n    private fun foodRecommends(): List<FoodContent> {\n        return listOf(\n                FoodContent(\"烧肉拼叉烧饭+肉包+可乐+虎邦辣椒酱\", R.mipmap.pic15, \"\", 50.6F),\n                FoodContent(\"绿豆汤+小肉+卤蛋+脆笋片\", R.mipmap.pic16, \"\", 50.6F),\n                FoodContent(\"冰镇绿豆汤\", R.mipmap.pic15, \"\", 15F),\n                FoodContent(\"台式炒饭+可乐+葱油饼套餐\", R.mipmap.pic16, \"\", 33F)\n        )\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/example/learn/business/MerchantActivity.kt",
    "content": "package com.example.learn.business\n\nimport android.os.Bundle\nimport com.example.learn.BaseActivity\nimport com.example.learn.R\nimport com.example.learn.log\nimport kotlinx.android.synthetic.main.merchant_activity.*\n\nclass MerchantActivity : BaseActivity() {\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        setContentView(R.layout.merchant_activity)\n        initialView()\n        log(\"MerchantActivity onCreate\")\n    }\n\n    private fun initialView() {\n        layContent.laySettle = laySettle\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/example/learn/business/MerchantCommentLayout.kt",
    "content": "package com.example.learn.business\n\nimport android.content.Context\nimport android.view.LayoutInflater\nimport android.view.View\nimport android.widget.FrameLayout\nimport com.example.learn.R\nimport kotlinx.android.synthetic.main.merchant_page_cell_layout.view.*\n\nclass MerchantCommentLayout(context: Context) : FrameLayout(context), ScrollableViewProvider {\n    override fun getScrollableView(): View {\n        return vRecycler\n    }\n\n    init {\n        LayoutInflater.from(context).inflate(R.layout.merchant_page_cell_layout, this)\n        initialData()\n    }\n\n    private fun initialData() {\n        vRecycler.setBackgroundColor(0xFFEFEFEF.toInt())\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/example/learn/business/MerchantContentLayout.kt",
    "content": "package com.example.learn.business\n\nimport android.animation.Animator\nimport android.animation.AnimatorListenerAdapter\nimport android.content.Context\nimport android.support.constraint.ConstraintLayout\nimport android.util.AttributeSet\nimport android.view.LayoutInflater\nimport android.view.View\nimport com.example.learn.R\nimport com.example.learn.dp\nimport com.example.learn.load\nimport com.example.learn.view.stateRefresh\nimport com.example.learn.view.stateSave\nimport com.example.learn.view.statesChangeByAnimation\nimport jp.wasabeef.glide.transformations.BlurTransformation\nimport kotlinx.android.synthetic.main.merchant_content_layout.view.*\n\n\nclass MerchantContentLayout(context: Context, attrs: AttributeSet?) : ConstraintLayout(context, attrs) {\n    var laySettle: MerchantSettleLayout? = null\n    private var firstLayout: Boolean = false\n    private var isExpanded = false\n    private var effected: Float = 0f\n\n    init {\n        LayoutInflater.from(context).inflate(R.layout.merchant_content_layout, this)\n\n        vCover.load(R.mipmap.cover, listOf(BlurTransformation()))\n\n        layScroll.setOnTouchListener { _, _ -> !isExpanded }\n\n        vTicket1.set(3, 27, \"2018.06.12\")\n        vTicket2.set(5, 40, \"2018.06.12\")\n\n        vSwitch.setOnClickListener { switch(!isExpanded) }\n        vHide.setOnClickListener { switch(!isExpanded) }\n    }\n\n    private fun animViews(): Array<View> = arrayOf(laySimple, vAvatar, vMerchantName, layTicket, vTicket1, vTicket2, vSwitchIcon)\n\n    override fun onWindowFocusChanged(hasWindowFocus: Boolean) {\n        super.onWindowFocusChanged(hasWindowFocus)\n        if (!firstLayout) {\n            firstLayout = true\n            laySimple.stateSave(R.id.vs1).a(1F)\n            laySimple.stateSave(R.id.vs2).a(0F)\n            vMerchantName.stateSave(R.id.vs1).a(0F)\n            vMerchantName.stateSave(R.id.vs2).a(1F)\n            layTicket.stateSave(R.id.vs1).mt(dp(15))\n            layTicket.stateSave(R.id.vs2).mt(dp(70))\n\n            vSwitchIcon.stateSave(R.id.vs1)\n            vSwitchIcon.stateSave(R.id.vs2).r(180F)\n\n            vAvatar.stateSave(R.id.vs1)\n            val tx: Float = ((width - vAvatar.width) / 2 - (vAvatar.layoutParams as MarginLayoutParams).leftMargin).toFloat()\n            vAvatar.stateSave(R.id.vs2).tx(tx).ty(dp(10).toFloat())\n        }\n    }\n\n    // 效果简单实现，具体内容应该根据业务动态计算变化高度区间。\n    fun effectByOffset(transY: Float) {\n        val p2: Float = when {\n            transY <= dp(10) -> 0F\n            transY > dp(10) && transY < dp(30) -> (transY - dp(10)) / dp(20)\n            else -> 1F\n        }\n        vt2.alpha = p2\n        vt222.alpha = p2\n\n        val p3: Float = when {\n            transY <= dp(40) -> 0F\n            transY > dp(40) && transY < dp(60) -> (transY - dp(40)) / dp(20)\n            else -> 1F\n        }\n        vt3.alpha = p3\n        vt333.alpha = p3\n\n        val p4: Float = when {\n            transY <= dp(70) -> 0F\n            transY > dp(70) && transY < dp(90) -> (transY - dp(70)) / dp(20)\n            else -> 1F\n        }\n        vt4.alpha = p4\n        vt444.alpha = p4\n\n        val p5: Float = when {\n            transY <= dp(110) -> 0F\n            transY > dp(110) && transY < dp(130) -> (transY - dp(110)) / dp(20)\n            else -> 1F\n        }\n        vt5.alpha = p5\n        vt555.alpha = p5\n\n        effected = when {\n            transY <= dp(140) -> 0F\n            transY > dp(140) && transY < dp(230) -> (transY - dp(140)) / dp(90)\n            else -> 1F\n        }\n        animViews().forEach { it.stateRefresh(R.id.vs1, R.id.vs2, effected) }\n    }\n\n    fun switch(expanded: Boolean, byScrollerSlide: Boolean = false) {\n        if (isExpanded == expanded) {\n            return\n        }\n\n        layScroll.scrollTo(0, 0)\n\n        isExpanded = expanded // 目标\n        val start = effected\n        val end = if (expanded) 1F else 0F\n        statesChangeByAnimation(animViews(), R.id.vs1, R.id.vs2, start, end,\n                null, if (!byScrollerSlide) internalAnimListener else null, 300)\n\n        laySettle?.switch(isExpanded)\n    }\n\n\n    var animListener: AnimatorListenerAdapter1? = null\n    private val internalAnimListener: AnimatorListenerAdapter = object : AnimatorListenerAdapter() {\n        override fun onAnimationStart(animation: Animator?) {\n            animListener?.onAnimationStart(animation, isExpanded)\n        }\n    }\n\n    interface AnimatorListenerAdapter1 {\n        fun onAnimationStart(animation: Animator?, toExpanded: Boolean)\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/example/learn/business/MerchantFoodLayout.kt",
    "content": "package com.example.learn.business\n\n\nimport android.content.Context\nimport android.support.v7.widget.RecyclerView\nimport android.view.LayoutInflater\nimport android.view.View\nimport android.view.ViewGroup\nimport android.widget.FrameLayout\nimport android.widget.ImageView\nimport com.chad.library.adapter.base.BaseMultiItemQuickAdapter\nimport com.chad.library.adapter.base.BaseQuickAdapter\nimport com.chad.library.adapter.base.BaseViewHolder\nimport com.chad.library.adapter.base.entity.MultiItemEntity\nimport com.example.learn.*\nimport com.oushangfeng.pinnedsectionitemdecoration.PinnedHeaderItemDecoration\nimport com.oushangfeng.pinnedsectionitemdecoration.utils.FullSpanUtil\nimport kotlinx.android.synthetic.main.merchant_page_food_layout.view.*\nimport org.greenrobot.eventbus.EventBus\nimport org.greenrobot.eventbus.Subscribe\nimport org.greenrobot.eventbus.ThreadMode\n\nclass MerchantFoodLayout(context: Context) : FrameLayout(context), ScrollableViewProvider {\n\n    var topHeight: Int = 0\n    var recommendHeight: Int = 0\n\n    init {\n        LayoutInflater.from(context).inflate(R.layout.merchant_page_food_layout, this)\n        initialData()\n    }\n\n    private fun initialData() {\n        val foodAdapter = FoodAdapter(Data.foodDetails())\n        vRecycler.addItemDecoration(PinnedHeaderItemDecoration.Builder(FoodAdapter.TYPE_TITLE)\n                .setDividerId(R.drawable.transparent)\n                .create())\n\n        vRecycler.adapter = foodAdapter\n        foodAdapter.openLoadAnimation()\n\n        vRecycler.addOnScrollListener(object : RecyclerView.OnScrollListener() {\n            var totalDy = 0\n\n            override fun onScrolled(recyclerView: RecyclerView?, dx: Int, dy: Int) {\n                totalDy -= dy\n                val transY = if (totalDy > -(topHeight + recommendHeight)) totalDy else -(topHeight + recommendHeight)\n                vSide.translationY = transY.toFloat()\n            }\n        })\n\n        vSide.isNestedScrollingEnabled = false\n        vSide.adapter = SideAdapter(Data.foodMenus())\n    }\n\n    override fun getScrollableView(): View {\n        return vRecycler\n    }\n\n    override fun onAttachedToWindow() {\n        super.onAttachedToWindow()\n        EventBus.getDefault().register(this)\n    }\n\n    override fun onDetachedFromWindow() {\n        super.onDetachedFromWindow()\n        EventBus.getDefault().unregister(this)\n    }\n\n    @Subscribe(threadMode = ThreadMode.MAIN)\n    fun handleBusEvent(event: BusEvent) {\n        when (event.act) {\n            Bus.FOOD_TOP_HEIGHT -> {\n                topHeight = event.obj as Int\n                adjustSideLayoutPosition()\n            }\n            Bus.FOOD_RECOMMEND_HEIGHT -> {\n                recommendHeight = event.obj as Int\n                adjustSideLayoutPosition()\n            }\n        }\n    }\n\n    private fun adjustSideLayoutPosition() {\n        val lp = (vSide.layoutParams as MarginLayoutParams)\n        if (lp.topMargin != topHeight + recommendHeight) {\n            lp.topMargin = topHeight + recommendHeight\n            lp.height = screenHeight() - resDimension(R.dimen.title_height) - resDimension(R.dimen.merchant_tab_height)\n            vSide.layoutParams = lp\n            vSide.anim(android.R.anim.fade_in, View.VISIBLE)\n        }\n    }\n}\n\nclass FoodTop : MultiItemEntity {\n    override fun getItemType(): Int = FoodAdapter.TYPE_TOP\n}\n\nclass FoodRecommend(val data: List<FoodContent>) : MultiItemEntity {\n    override fun getItemType(): Int = FoodAdapter.TYPE_RECOMMEND\n}\n\nclass FoodCover(val url: Int) : MultiItemEntity {\n    override fun getItemType(): Int = FoodAdapter.TYPE_CONTENT_IMAGE\n}\n\nclass FoodTitle(val title: String) : MultiItemEntity {\n    override fun getItemType(): Int = FoodAdapter.TYPE_TITLE\n}\n\nclass FoodContent(val name: String, val icon: Int, val desc: String, val price: Float) : MultiItemEntity {\n    override fun getItemType(): Int = FoodAdapter.TYPE_CONTENT\n}\n\nclass FoodAdapter(data: List<MultiItemEntity>) : BaseMultiItemQuickAdapter<MultiItemEntity, BaseViewHolder>(data) {\n    companion object {\n        private var TYPE_PRODUCER = 1\n        val TYPE_TOP = TYPE_PRODUCER++\n        val TYPE_RECOMMEND = TYPE_PRODUCER++\n        val TYPE_CONTENT_IMAGE = TYPE_PRODUCER++\n        val TYPE_TITLE = TYPE_PRODUCER++\n        val TYPE_CONTENT = TYPE_PRODUCER++\n    }\n\n\n    init {\n        addItemType(TYPE_TOP, R.layout.merchant_food_list_top)\n        addItemType(TYPE_RECOMMEND, R.layout.merchant_food_list_recommend)\n        addItemType(TYPE_CONTENT_IMAGE, R.layout.merchant_food_list_content_image)\n        addItemType(TYPE_TITLE, R.layout.merchant_food_list_sticky_title)\n        addItemType(TYPE_CONTENT, R.layout.merchant_food_list_content)\n    }\n\n\n    override fun onAttachedToRecyclerView(recyclerView: RecyclerView) {\n        super.onAttachedToRecyclerView(recyclerView)\n        FullSpanUtil.onAttachedToRecyclerView(recyclerView, this, TYPE_TITLE)\n    }\n\n    override fun onViewAttachedToWindow(holder: BaseViewHolder) {\n        super.onViewAttachedToWindow(holder)\n        FullSpanUtil.onViewAttachedToWindow(holder, this, TYPE_TITLE)\n    }\n\n    override fun convert(helper: BaseViewHolder, item: MultiItemEntity) {\n        when (helper.itemViewType) {\n            TYPE_TOP -> {\n                helper.itemView.postDelayed1(Runnable { postEvent(Bus.FOOD_TOP_HEIGHT, helper.itemView.height) })\n            }\n            TYPE_RECOMMEND -> {\n                helper.itemView.postDelayed1(Runnable { postEvent(Bus.FOOD_RECOMMEND_HEIGHT, helper.itemView.height) })\n                val view: RecyclerView = helper.getView(R.id.vRecommends)\n                view.adapter = FoodRecommendCellAdapter((item as FoodRecommend).data)\n            }\n            TYPE_CONTENT_IMAGE -> {\n                (item as FoodCover).apply { helper.setImageUrl(R.id.vImage, url) }\n            }\n            TYPE_TITLE -> {\n                (item as FoodTitle).apply { helper.setText(R.id.vTitle, title) }\n            }\n            TYPE_CONTENT -> {\n                (item as FoodContent).apply {\n                    helper.setText(R.id.vPrice, \"￥$price\")\n                            .setText(R.id.vName, name)\n                            .setText(R.id.vDesc, desc)\n                            .setImageUrl(R.id.vIcon, icon)\n                }\n            }\n        }\n    }\n}\n\nfun BaseViewHolder.setImageUrl(viewId: Int, imageUrl: Int): BaseViewHolder {\n    val view: ImageView = getView(viewId)\n    view.load(imageUrl)\n    return this\n}\n\nclass FoodRecommendCellAdapter(data: List<FoodContent>) : BaseQuickAdapter<FoodContent, BaseViewHolder>(data) {\n    init {\n        mLayoutResId = R.layout.merchant_food_list_recommend_cell\n    }\n\n    override fun convert(helper: BaseViewHolder, item: FoodContent) {\n        (helper.itemView.layoutParams as ViewGroup.MarginLayoutParams).leftMargin = if (mData.indexOf(item) != 0) dp(2) else 0\n\n        helper.setText(R.id.vPrice, \"￥${item.price}\")\n                .setText(R.id.vName, item.name)\n                .setImageUrl(R.id.vImage, item.icon)\n    }\n}\n\n\nclass SideAdapter(data: List<FoodTitle>) : BaseQuickAdapter<FoodTitle, BaseViewHolder>(data) {\n    init {\n        mLayoutResId = R.layout.merchant_food_list_side\n    }\n\n    override fun convert(helper: BaseViewHolder, item: FoodTitle) {\n        item.apply { helper.setText(R.id.vTitle, title) }\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/example/learn/business/MerchantInfoLayout.kt",
    "content": "package com.example.learn.business\n\nimport android.content.Context\nimport android.view.LayoutInflater\nimport android.view.View\nimport android.widget.FrameLayout\nimport com.example.learn.R\nimport com.example.learn.log\nimport kotlinx.android.synthetic.main.merchant_page_cell_layout.view.*\n\nclass MerchantInfoLayout(context: Context) : FrameLayout(context), ScrollableViewProvider {\n    override fun getScrollableView(): View {\n        return vRecycler\n    }\n\n    init {\n        LayoutInflater.from(context).inflate(R.layout.merchant_page_cell_layout, this)\n        initialData()\n    }\n\n    private fun initialData() {\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/example/learn/business/MerchantPageBehavior.kt",
    "content": "package com.example.learn.business\n\nimport android.animation.Animator\nimport android.content.Context\nimport android.graphics.Color\nimport android.support.design.widget.CoordinatorLayout\nimport android.util.AttributeSet\nimport android.view.View\nimport android.widget.Scroller\nimport com.example.learn.R\nimport com.example.learn.argbEvaluator\nimport com.example.learn.dp\nimport com.example.learn.view.ViewPager2\nimport kotlinx.android.synthetic.main.merchant_page_layout.view.*\n\nclass MerchantPageBehavior(context: Context, attrs: AttributeSet) : CoordinatorLayout.Behavior<MerchantPageLayout>(context, attrs) {\n    private lateinit var selfView: MerchantPageLayout\n    private lateinit var layTitle: MerchantTitleLayout // 商店标题\n    private lateinit var vPager: ViewPager2 // 商品菜单所在pager\n    private lateinit var layContent: MerchantContentLayout // 商店详情\n    private lateinit var laySettle: MerchantSettleLayout\n    private val pagingTouchSlop = dp(5)\n    private var horizontalPagingTouch = 0 // 菜单横项列表(推荐商品)内容的触摸滑动距离\n    private var isScrollRecommends = false\n    private var verticalPagingTouch = 0 // 菜单竖项列表(商品，评价，商家)内容的触摸滑动距离\n    private var simpleTopDistance = 0\n    private var isScrollToFullFood = false // 上滑显示商品菜单\n    private var isScrollToHideFood = false // 下滑显示商店详情\n    private val scroller = Scroller(context)\n    private val scrollDuration = 800\n    private val handler = android.os.Handler()\n    private val flingRunnable = object : Runnable {\n        override fun run() {\n            if (scroller.computeScrollOffset()) {\n                selfView.translationY = scroller.currY.toFloat()\n                layContent.effectByOffset(selfView.translationY)\n                laySettle.effectByOffset(selfView.translationY)\n                handler.post(this)\n            } else {\n                isScrollToHideFood = false\n            }\n        }\n    }\n\n    private val mAnimListener = object : MerchantContentLayout.AnimatorListenerAdapter1 {\n        override fun onAnimationStart(animation: Animator?, toExpanded: Boolean) {\n            if (toExpanded) {\n                val defaultDisplayHeight = (selfView.height - simpleTopDistance)\n                scroller.startScroll(0, selfView.translationY.toInt(), 0, (defaultDisplayHeight - selfView.translationY).toInt(), scrollDuration)\n            } else {\n                scroller.startScroll(0, selfView.translationY.toInt(), 0, (-selfView.translationY).toInt(), scrollDuration)\n            }\n\n            handler.post(flingRunnable)\n            isScrollToHideFood = true\n        }\n    }\n\n    override fun onLayoutChild(parent: CoordinatorLayout, child: MerchantPageLayout, layoutDirection: Int): Boolean {\n        selfView = child\n        vPager = child.findViewById(R.id.vPager)\n\n        val lp = selfView.layoutParams as CoordinatorLayout.LayoutParams\n        if (lp.height == CoordinatorLayout.LayoutParams.MATCH_PARENT) {\n            simpleTopDistance = lp.topMargin - layTitle.height\n            lp.height = parent.height - layTitle.height\n            child.layoutParams = lp\n            return true\n        }\n        return super.onLayoutChild(parent, child, layoutDirection)\n    }\n\n    override fun layoutDependsOn(parent: CoordinatorLayout, child: MerchantPageLayout, dependency: View): Boolean {\n        when {\n            dependency.id == R.id.layTitle -> layTitle = dependency as MerchantTitleLayout\n            dependency.id == R.id.layContent -> layContent = (dependency as MerchantContentLayout).apply { animListener = mAnimListener }\n            dependency.id == R.id.laySettle -> laySettle = dependency as MerchantSettleLayout\n            else -> return false\n        }\n        return true\n    }\n\n    override fun onDependentViewChanged(parent: CoordinatorLayout, child: MerchantPageLayout, dependency: View): Boolean = true\n    override fun onStartNestedScroll(coordinatorLayout: CoordinatorLayout, child: MerchantPageLayout, directTargetChild: View, target: View, axes: Int, type: Int): Boolean = true\n\n    override fun onNestedScrollAccepted(coordinatorLayout: CoordinatorLayout, child: MerchantPageLayout, directTargetChild: View, target: View, axes: Int, type: Int) {\n        scroller.abortAnimation()\n        isScrollToHideFood = false\n        super.onNestedScrollAccepted(coordinatorLayout, child, directTargetChild, target, axes, type)\n    }\n\n    override fun onNestedPreScroll(coordinatorLayout: CoordinatorLayout, child: MerchantPageLayout, target: View, dx: Int, dy: Int, consumed: IntArray, type: Int) {\n        if (isScrollToHideFood) {\n            consumed[1] = dy\n            return // scroller 滑动中.. do nothing\n        }\n\n        verticalPagingTouch += dy\n        if (vPager.isScrollable && Math.abs(verticalPagingTouch) > pagingTouchSlop) {\n            vPager.isScrollable = false // 屏蔽 pager横向滑动干扰\n        }\n\n        horizontalPagingTouch += dx\n        if (R.id.vRecommends == target.id) {\n            if (!isScrollRecommends) {\n                consumed[0] = dx\n                if (vPager.isScrollable && Math.abs(horizontalPagingTouch) > pagingTouchSlop) isScrollRecommends = true\n            }\n            if (isScrollRecommends) {\n                consumed[1] = dy\n                return // 横项滑动推荐列表中\n            }\n        }\n\n        if ((child.translationY < 0 || (child.translationY == 0F && dy > 0)) && !child.canScrollVertically()) {\n            val effect = layTitle.effectByOffset(dy)\n            selfView.vSmartTab.setBackgroundColor(argbEvaluator.evaluate(effect, Color.WHITE, 0xFFFAFAFA.toInt()) as Int)\n            val transY = -simpleTopDistance * effect\n            if (transY != child.translationY) {\n                child.translationY = transY\n                consumed[1] = dy\n            }\n\n            if (type == 1) {\n                isScrollToFullFood = true\n            }\n        } else if ((child.translationY > 0 || (child.translationY == 0F && dy < 0)) && !child.canScrollVertically()) {\n            if (isScrollToFullFood) {\n                child.translationY = 0F // top fling to bottom\n            } else {\n                child.translationY -= dy\n                layContent.effectByOffset(child.translationY)\n                laySettle.effectByOffset(child.translationY)\n            }\n            consumed[1] = dy\n        }\n    }\n\n    override fun onNestedPreFling(coordinatorLayout: CoordinatorLayout, child: MerchantPageLayout, target: View, velocityX: Float, velocityY: Float): Boolean {\n        return onUserStopDragging()\n    }\n\n    override fun onStopNestedScroll(coordinatorLayout: CoordinatorLayout, child: MerchantPageLayout, target: View, type: Int) {\n        isScrollToFullFood = false\n        verticalPagingTouch = 0\n        vPager.isScrollable = true\n        horizontalPagingTouch = 0\n        isScrollRecommends = false\n\n        if (!isScrollToHideFood) {\n            onUserStopDragging()\n        }\n    }\n\n    private fun onUserStopDragging(): Boolean {\n        if (selfView.translationY < 0f) {\n            return false\n        }\n\n        val defaultDisplayHeight = (selfView.height - simpleTopDistance)\n        if (defaultDisplayHeight * 0.4F > selfView.translationY) {\n            scroller.startScroll(0, selfView.translationY.toInt(), 0, (-selfView.translationY).toInt(), scrollDuration)\n            layContent.switch(false, true)\n            laySettle.switch(false)\n        } else {\n            scroller.startScroll(0, selfView.translationY.toInt(), 0, (defaultDisplayHeight - selfView.translationY).toInt(), scrollDuration)\n            layContent.switch(true, true)\n            laySettle.switch(true)\n        }\n        handler.post(flingRunnable)\n        isScrollToHideFood = true\n        return true\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/example/learn/business/MerchantPageLayout.kt",
    "content": "package com.example.learn.business\n\nimport android.content.Context\nimport android.support.v4.view.PagerAdapter\nimport android.util.AttributeSet\nimport android.view.LayoutInflater\nimport android.view.View\nimport android.view.ViewGroup\nimport android.widget.LinearLayout\nimport com.example.learn.R\nimport kotlinx.android.synthetic.main.merchant_page_layout.view.*\n\nclass MerchantPageLayout(context: Context, attrs: AttributeSet?) : LinearLayout(context, attrs) {\n    lateinit var pagerAdapter: MerchantPageAdapter\n\n    init {\n        LayoutInflater.from(context).inflate(R.layout.merchant_page_layout, this)\n    }\n\n    override fun onFinishInflate() {\n        super.onFinishInflate()\n        pagerAdapter = MerchantPageAdapter(context)\n        vPager.adapter = pagerAdapter\n        vSmartTab.setViewPager(vPager)\n    }\n\n    fun canScrollVertically(): Boolean {\n        val view = (pagerAdapter.getItem(vPager.currentItem) as ScrollableViewProvider).getScrollableView()\n        return view.canScrollVertically(-1)\n    }\n}\n\nclass MerchantPageAdapter(context: Context) : PagerAdapter() {\n    private val layFood = MerchantFoodLayout(context)\n    private val layInfo = MerchantInfoLayout(context)\n    private val layComment = MerchantCommentLayout(context)\n\n    override fun getCount(): Int = 3\n    override fun isViewFromObject(view: View, `object`: Any): Boolean = view == `object`\n    override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) = container.removeView(`object` as View)\n    override fun getPageTitle(position: Int): CharSequence = when (position) {\n        0 -> \"点菜\"\n        1 -> \"评论(9999+)\"\n        2 -> \"商家\"\n        else -> \"\"\n    }\n\n    override fun instantiateItem(container: ViewGroup, position: Int): Any {\n        val content = getItem(position)\n        container.addView(content)\n        return content\n    }\n\n    fun getItem(position: Int): View {\n        return when (position) {\n            0 -> layFood\n            1 -> layComment\n            2 -> layInfo\n            else -> throw RuntimeException(\"getItem error position $position\")\n        }\n    }\n}\n\ninterface ScrollableViewProvider {\n    fun getScrollableView(): View\n}"
  },
  {
    "path": "app/src/main/java/com/example/learn/business/MerchantSettleLayout.kt",
    "content": "package com.example.learn.business\n\nimport android.animation.Animator\nimport android.animation.AnimatorListenerAdapter\nimport android.content.Context\nimport android.support.constraint.ConstraintLayout\nimport android.util.AttributeSet\nimport android.view.LayoutInflater\nimport android.view.View\nimport com.example.learn.R\nimport com.example.learn.dp\nimport com.example.learn.view.stateRefresh\nimport com.example.learn.view.stateSave\nimport com.example.learn.view.statesChangeByAnimation\n\nclass MerchantSettleLayout(context: Context, attrs: AttributeSet?) : ConstraintLayout(context, attrs) {\n    private var firstLayout: Boolean = false\n    private var isExpanded = false // layContent 内容是否展开查看中\n    private var effected: Float = 0f\n\n    init {\n        LayoutInflater.from(context).inflate(R.layout.merchant_settle_layout, this)\n    }\n\n    private fun animViews(): Array<View> = arrayOf(this)\n\n    override fun onWindowFocusChanged(hasWindowFocus: Boolean) {\n        super.onWindowFocusChanged(hasWindowFocus)\n        if (!firstLayout) {\n            firstLayout = true\n            stateSave(R.id.vs1).a(1F)\n            stateSave(R.id.vs2).a(0F)\n        }\n    }\n\n    // 效果简单实现，具体内容应该根据业务动态计算变化高度区间。\n    fun effectByOffset(transY: Float) {\n        effected = when {\n            transY <= dp(110) -> 0F\n            transY > dp(110) && transY < dp(140) -> (transY - dp(110)) / dp(30)\n            else -> 1F\n        }\n        animViews().forEach { it.stateRefresh(R.id.vs1, R.id.vs2, effected) }\n    }\n\n    fun switch(expanded: Boolean) {\n        if (isExpanded == expanded) {\n            return\n        }\n\n        isExpanded = expanded // 目标\n        val start = effected\n        val end = if (expanded) 1F else 0F\n        statesChangeByAnimation(animViews(), R.id.vs1, R.id.vs2, start, end,\n                null, object : AnimatorListenerAdapter() {\n            override fun onAnimationStart(animation: Animator?) {\n                visibility = View.VISIBLE\n            }\n\n            override fun onAnimationEnd(animation: Animator?) {\n                if (isExpanded) visibility = View.INVISIBLE\n            }\n        }, 300)\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/example/learn/business/MerchantTitleLayout.kt",
    "content": "package com.example.learn.business\n\nimport android.content.Context\nimport android.content.res.ColorStateList\nimport android.graphics.Color\nimport android.graphics.drawable.Drawable\nimport android.support.v4.graphics.drawable.DrawableCompat\nimport android.util.AttributeSet\nimport android.view.LayoutInflater\nimport android.view.animation.AccelerateDecelerateInterpolator\nimport android.widget.FrameLayout\nimport com.example.learn.R\nimport com.example.learn.argbEvaluator\nimport com.example.learn.dp\nimport com.example.learn.resDimension\nimport com.example.learn.resDrawable\nimport kotlinx.android.synthetic.main.merchant_title_layout.view.*\n\nclass MerchantTitleLayout(context: Context, attrs: AttributeSet?) : FrameLayout(context, attrs) {\n    private val adInterpolator = AccelerateDecelerateInterpolator()\n    private val offsetMax = resDimension(R.dimen.merchant_offset).toFloat()\n    private var offset = 0F\n\n    private val drawableBack = resDrawable(R.mipmap.back_white)\n    private val drawableSearch = resDrawable(R.mipmap.icon_search)\n    private val drawableCollection = resDrawable(R.mipmap.icon_collection)\n    private val drawableTogether = resDrawable(R.mipmap.icon_together)\n    private val drawableMenu = resDrawable(R.mipmap.icon_menu)\n\n    init {\n        LayoutInflater.from(context).inflate(R.layout.merchant_title_layout, this)\n    }\n\n    fun effectByOffset(dy: Int): Float {\n        if (dy > 0 && offset == offsetMax) return 1F\n        else if (dy < 0 && offset == 0F) return 0F\n\n        offset += dy\n        if (offset > offsetMax) offset = offsetMax\n        else if (offset < 0) offset = 0F\n\n        val effect = adInterpolator.getInterpolation(offset / offsetMax)\n\n        setBackgroundColor(argbEvaluator.evaluate(effect, Color.TRANSPARENT, 0xFFFAFAFA.toInt()) as Int)\n\n        val e: Int = argbEvaluator.evaluate(effect, Color.WHITE, 0xFF646464.toInt()) as Int\n        vBack.setImageDrawable(tintDrawable(drawableBack, ColorStateList.valueOf(e)))\n        vTogether.setImageDrawable(tintDrawable(drawableTogether, ColorStateList.valueOf(e)))\n        vMenu.setImageDrawable(tintDrawable(drawableMenu, ColorStateList.valueOf(e)))\n        vCollection.setImageDrawable(tintDrawable(drawableCollection, ColorStateList.valueOf(e)))\n        vSearch.setImageDrawable(tintDrawable(drawableSearch, ColorStateList.valueOf(e)))\n\n        vSearch.scaleX = (1 - 0.4 * effect).toFloat()\n        vSearch.scaleY = (1 - 0.4 * effect).toFloat()\n        vSearch.translationX = -(vSearchBorder.width - vSearch.width + dp(3)) * effect\n        vSearchBorder.alpha = effect\n        vSearchBorder.pivotX = vSearchBorder.width.toFloat()\n        vSearchBorder.scaleX = (0.2 + 0.8 * effect).toFloat()\n        vSearchHint.alpha = effect\n        vSearchHint.translationX = (vSearchHint.width / 3) * (1 - effect)\n\n        return effect\n    }\n\n    private fun tintDrawable(drawable: Drawable, colors: ColorStateList): Drawable {\n        val wrappedDrawable = DrawableCompat.wrap(drawable)\n        DrawableCompat.setTintList(wrappedDrawable, colors)\n        return wrappedDrawable\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/example/learn/business/MyEventLayout.kt",
    "content": "package com.example.learn.business\n\nimport android.content.Context\nimport android.util.AttributeSet\nimport android.view.MotionEvent\nimport android.view.ViewConfiguration\nimport android.widget.FrameLayout\n\nclass MyEventLayout(context: Context, attrs: AttributeSet?) : FrameLayout(context, attrs) {\n    private var needDispatchDown = false\n    private var mLastMoveEvent: MotionEvent? = null\n\n    override fun onInterceptTouchEvent(ev: MotionEvent): Boolean {\n        return true\n    }\n\n    override fun onTouchEvent(ev: MotionEvent): Boolean {\n        when (ev.action) {\n            MotionEvent.ACTION_DOWN -> {\n                needDispatchDown = true\n            }\n            MotionEvent.ACTION_MOVE -> {\n                dispatchHorizontalTouchEventToChild(ev)\n            }\n            MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> {\n                needDispatchDown = false\n            }\n        }\n\n        mLastMoveEvent = ev\n        return true\n    }\n\n    private fun dispatchHorizontalTouchEventToChild(current: MotionEvent) {\n        mLastMoveEvent?.apply {\n            if (needDispatchDown) {\n                val d = MotionEvent.obtain(downTime, eventTime + ViewConfiguration.getLongPressTimeout(), MotionEvent.ACTION_DOWN, current.x, y, metaState)\n                getChildAt(0).onTouchEvent(d)\n                needDispatchDown = false\n            }\n            val e = MotionEvent.obtain(downTime, eventTime + ViewConfiguration.getLongPressTimeout(), MotionEvent.ACTION_MOVE, current.x, y, metaState)\n            getChildAt(0).onTouchEvent(e)\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/example/learn/business/TicketView.kt",
    "content": "package com.example.learn.business\n\nimport android.content.Context\nimport android.support.constraint.ConstraintLayout\nimport android.util.AttributeSet\nimport android.view.LayoutInflater\nimport com.example.learn.R\nimport com.example.learn.view.AnimationUpdateListener\nimport com.example.learn.view.stateRefresh\nimport com.example.learn.view.stateSave\nimport com.example.learn.text\nimport kotlinx.android.synthetic.main.ticket_view.view.*\n\nclass TicketView(context: Context, attrs: AttributeSet?) : ConstraintLayout(context, attrs), AnimationUpdateListener {\n\n    private var firstLayout: Boolean = false\n\n    init {\n        LayoutInflater.from(context).inflate(R.layout.ticket_view, this)\n    }\n\n    override fun onWindowFocusChanged(hasWindowFocus: Boolean) {\n        super.onWindowFocusChanged(hasWindowFocus)\n        if (!firstLayout) {\n            firstLayout = true\n            vBorder1.stateSave(R.id.vs1).a(1F)\n            vBorder1.stateSave(R.id.vs2).ws(3.8F).hs(3.8F).a(0F)\n            vBorder2.stateSave(R.id.vs1).a(0F)\n            vBorder2.stateSave(R.id.vs2).ws(3.8F).hs(3.8F).a(1F)\n            vSimple.stateSave(R.id.vs1)\n            vSimple.stateSave(R.id.vs2).a(0f)\n            layDetail.stateSave(R.id.vs1)\n            layDetail.stateSave(R.id.vs2).sx(1F).sy(1F).a(1F)\n        }\n    }\n\n    fun set(amount: Int, limit: Int, expireTime: String) {\n        vSimple.text(\"领￥$amount\")\n\n        vDetail1.text(\"￥$amount\")\n        vDetail2.text(\"满$limit 可用\")\n        vDetail3.text(\"有效期至$expireTime\")\n    }\n\n    override fun onAnimationUpdate(tag1: Int, tag2: Int, p: Float) {\n        arrayOf(vBorder1, vBorder2, vSimple, layDetail).forEach { it.stateRefresh(tag1, tag2, p) }\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/example/learn/view/ScrollHelper.kt",
    "content": "package com.example.learn.view\n\nimport android.support.v7.widget.LinearLayoutManager\nimport android.support.v7.widget.RecyclerView\nimport com.example.learn.log\n\n\nobject ScrollHelper {\n\n    open class OnScrollStateChangedListener {\n        open fun onScrollToBottom() {}\n    }\n\n    fun init(recyclerView: RecyclerView, callback: OnScrollStateChangedListener) {\n        if (recyclerView.layoutManager !is LinearLayoutManager) throw IllegalArgumentException(\"just support LinearLayoutManager\")\n        val layoutManager: LinearLayoutManager = recyclerView.layoutManager as LinearLayoutManager\n\n        recyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() {\n            private var scrollDown = false\n\n            override fun onScrolled(vRecycler: RecyclerView?, dx: Int, dy: Int) {\n                scrollDown = if (layoutManager.reverseLayout) dy < 0 else dy > 0\n            }\n\n            override fun onScrollStateChanged(vRecycler: RecyclerView?, newState: Int) {\n                when (newState) {\n                    RecyclerView.SCROLL_STATE_IDLE -> {\n                        val lastVisibleItem = layoutManager.findLastCompletelyVisibleItemPosition()\n                        val totalItemCount = layoutManager.itemCount\n                        log(\"onScrollStateChanged  lastVisibleItem[$lastVisibleItem]  totalItemCount[$totalItemCount]  scrollDown[$scrollDown]\")\n                        if (lastVisibleItem >= totalItemCount - 1 && scrollDown) {\n                            callback.onScrollToBottom()\n                            log(\"onScrollStateChanged  onScrollToBottom\")\n                        }\n                    }\n                    RecyclerView.SCROLL_STATE_DRAGGING -> {\n                    }\n                }\n            }\n        })\n    }\n\n    open class OnScrollStateChangedListener2 {\n        open fun onScrollToTop() {}\n    }\n\n    fun init1(recyclerView: RecyclerView, callback: OnScrollStateChangedListener2) {\n        if (recyclerView.layoutManager !is LinearLayoutManager) throw IllegalArgumentException(\"just1 support LinearLayoutManager\")\n        val layoutManager: LinearLayoutManager = recyclerView.layoutManager as LinearLayoutManager\n\n        recyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() {\n            private var scrollDown = false\n\n            override fun onScrolled(vRecycler: RecyclerView?, dx: Int, dy: Int) {\n                scrollDown = if (layoutManager.reverseLayout) dy < 0 else dy > 0\n            }\n\n            override fun onScrollStateChanged(vRecycler: RecyclerView?, newState: Int) {\n                when (newState) {\n                    RecyclerView.SCROLL_STATE_IDLE -> {\n                        val firstVisibleItem = layoutManager.findFirstCompletelyVisibleItemPosition()\n                        log(\"onScrollStateChanged  firstVisibleItem[$firstVisibleItem] scrollUp[${!scrollDown}]\")\n                        if (firstVisibleItem <= 0 && !scrollDown) {\n                            callback.onScrollToTop()\n                            log(\"onScrollStateChanged  onScrollToTop\")\n                        }\n                    }\n                    RecyclerView.SCROLL_STATE_DRAGGING -> {\n                    }\n                }\n            }\n        })\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/example/learn/view/SmartTabLayout1.java",
    "content": "package com.example.learn.view;\n\n\nimport android.content.Context;\nimport android.graphics.Typeface;\nimport android.support.v4.view.ViewPager;\nimport android.text.TextUtils;\nimport android.util.AttributeSet;\nimport android.view.View;\nimport android.widget.TextView;\n\n\npublic class SmartTabLayout1 extends com.ogaclejapan.smarttablayout.SmartTabLayout {\n    private ViewPager vPager;\n    private View vLastTab;\n\n    private ViewPager.OnPageChangeListener mSmartPageChangeListener;\n\n    public void setSmartPageChangeListener(ViewPager.OnPageChangeListener cb) {\n        mSmartPageChangeListener = cb;\n    }\n\n    public SmartTabLayout1(Context context) {\n        this(context, null);\n    }\n\n    public SmartTabLayout1(Context context, AttributeSet attrs) {\n        super(context, attrs);\n    }\n\n    public void useFakeBoldSelectedTextTab() {\n        final ViewPager.OnPageChangeListener onPageChangeListener = new ViewPager.OnPageChangeListener() {\n            @Override\n            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {\n                if (mSmartPageChangeListener != null)\n                    mSmartPageChangeListener.onPageScrolled(position, positionOffset, positionOffsetPixels);\n            }\n\n            @Override\n            public void onPageSelected(int position) {\n                if (mSmartPageChangeListener != null)\n                    mSmartPageChangeListener.onPageSelected(position);\n\n                if (vLastTab != null) {\n                    if (vLastTab instanceof TextView) {\n                        ((TextView) vLastTab).getPaint().setFakeBoldText(false);\n                    }\n                }\n                vLastTab = getTabAt(position);\n                if (vLastTab instanceof TextView) {\n                    ((TextView) vLastTab).getPaint().setFakeBoldText(true);\n                }\n            }\n\n            @Override\n            public void onPageScrollStateChanged(int state) {\n                if (mSmartPageChangeListener != null)\n                    mSmartPageChangeListener.onPageScrollStateChanged(state);\n            }\n        };\n\n        onPageChangeListener.onPageSelected(vPager.getCurrentItem());\n        setOnPageChangeListener(onPageChangeListener);\n    }\n\n    @Override\n    public void setViewPager(ViewPager viewPager) {\n        vPager = viewPager;\n        super.setViewPager(viewPager);\n        useFakeBoldSelectedTextTab();\n    }\n\n    @Override\n    protected TextView createDefaultTabView(CharSequence title) {\n        TextView textView = super.createDefaultTabView(title);\n        textView.setTypeface(Typeface.DEFAULT);\n        textView.setSingleLine(true);\n        textView.setEllipsize(TextUtils.TruncateAt.MIDDLE);\n        return textView;\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/example/learn/view/ViewPager2.java",
    "content": "package com.example.learn.view;\n\nimport android.content.Context;\nimport android.support.annotation.NonNull;\nimport android.support.annotation.Nullable;\nimport android.support.v4.view.ViewPager;\nimport android.util.AttributeSet;\nimport android.view.MotionEvent;\n\npublic class ViewPager2 extends ViewPager {\n    private boolean scrollable = true;\n\n    public ViewPager2(@NonNull Context context, @Nullable AttributeSet attrs) {\n        super(context, attrs);\n    }\n\n    public boolean isScrollable() {\n        return scrollable;\n    }\n\n    public void setScrollable(boolean scrollable) {\n        this.scrollable = scrollable;\n    }\n\n    @Override\n    public boolean onInterceptTouchEvent(MotionEvent ev) {\n        return scrollable && super.onInterceptTouchEvent(ev);\n    }\n\n    @Override\n    public boolean onTouchEvent(MotionEvent ev) {\n        return scrollable && super.onTouchEvent(ev);\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/example/learn/view/ViewState.kt",
    "content": "package com.example.learn.view\n\nimport android.animation.AnimatorListenerAdapter\nimport android.animation.ValueAnimator\nimport android.view.View\nimport android.view.ViewGroup\nimport android.view.animation.AccelerateDecelerateInterpolator\n\nclass ViewState {\n    var topMargin: Int = 0\n    var bottomMargin: Int = 0\n    var leftMargin: Int = 0\n    var rightMargin: Int = 0\n    var width: Int = 0\n    var height: Int = 0\n    var translationX: Float = 0F\n    var translationY: Float = 0F\n    var scaleX: Float = 0F\n    var scaleY: Float = 0F\n    var rotation: Float = 0F\n    var alpha: Float = 0F\n\n    fun sx(scaleX: Float): ViewState {\n        this.scaleX = scaleX\n        return this\n    }\n\n    fun sxBy(value: Float): ViewState {\n        this.scaleX *= value\n        return this\n    }\n\n    fun sy(scaleY: Float): ViewState {\n        this.scaleY = scaleY\n        return this\n    }\n\n    fun syBy(value: Float): ViewState {\n        this.scaleY *= value\n        return this\n    }\n\n    fun a(alpha: Float): ViewState {\n        this.alpha = alpha\n        return this\n    }\n\n    fun w(width: Int): ViewState {\n        this.width = width\n        return this\n    }\n\n\n    fun h(height: Int): ViewState {\n        this.height = height\n        return this\n    }\n\n    fun r(rotation: Float): ViewState {\n        this.rotation = rotation\n        return this\n    }\n\n    fun ws(s: Float): ViewState {\n        this.width = (width * s).toInt()\n        return this\n    }\n\n    fun hs(s: Float): ViewState {\n        this.height = (height * s).toInt()\n        return this\n    }\n\n    fun tx(translationX: Float): ViewState {\n        this.translationX = translationX\n        return this\n    }\n\n    fun ty(translationY: Float): ViewState {\n        this.translationY = translationY\n        return this\n    }\n\n    fun ml(leftMargin: Int): ViewState {\n        this.leftMargin = leftMargin\n        return this\n    }\n\n    fun mr(rightMargin: Int): ViewState {\n        this.rightMargin = rightMargin\n        return this\n    }\n\n    fun mt(topMargin: Int): ViewState {\n        this.topMargin = topMargin\n        return this\n    }\n\n    fun mn(bottomMargin: Int): ViewState {\n        this.bottomMargin = bottomMargin\n        return this\n    }\n\n    fun copy(view: View): ViewState {\n        this.width = view.width\n        this.height = view.height\n        this.translationX = view.translationX\n        this.translationY = view.translationY\n        this.scaleX = view.scaleX\n        this.scaleY = view.scaleY\n        this.rotation = view.rotation\n        this.alpha = view.alpha\n\n        (view.layoutParams as? ViewGroup.MarginLayoutParams)?.let {\n            this.topMargin = it.topMargin\n            this.bottomMargin = it.bottomMargin\n            this.leftMargin = it.leftMargin\n            this.rightMargin = it.rightMargin\n        }\n\n        return this\n    }\n}\n\nfun View.stateSet(tag: Int, vs: ViewState) {\n    setTag(tag, vs)\n}\n\nfun View.stateRead(tag: Int): ViewState? {\n    return getTag(tag) as? ViewState\n}\n\nfun View.stateSave(tag: Int): ViewState {\n    val vs = stateRead(tag) ?: ViewState()\n    vs.copy(this)\n    stateSet(tag, vs)\n    return vs\n}\n\nfun View.stateRefresh(tag1: Int, tag2: Int, p: Float) {\n    if (this is AnimationUpdateListener) {\n        onAnimationUpdate(tag1, tag2, p)\n    } else {\n        val vs1 = stateRead(tag1)\n        val vs2 = stateRead(tag2)\n        if (vs1 != null && vs2 != null) {\n            if (vs1.translationX != vs2.translationX) translationX = vs1.translationX + (vs2.translationX - vs1.translationX) * p\n            if (vs1.translationY != vs2.translationY) translationY = vs1.translationY + (vs2.translationY - vs1.translationY) * p\n            if (vs1.scaleX != vs2.scaleX) scaleX = vs1.scaleX + (vs2.scaleX - vs1.scaleX) * p\n            if (vs1.scaleY != vs2.scaleY) scaleY = vs1.scaleY + (vs2.scaleY - vs1.scaleY) * p\n            if (vs1.rotation != vs2.rotation) rotation = (vs1.rotation + (vs2.rotation - vs1.rotation) * p) % 360\n            if (vs1.alpha != vs2.alpha) alpha = vs1.alpha + (vs2.alpha - vs1.alpha) * p\n\n            val o = layoutParams\n            var lpChanged = false\n            if (vs1.width != vs2.width) {\n                o.width = (vs1.width + (vs2.width - vs1.width) * p).toInt()\n                lpChanged = true\n            }\n            if (vs1.height != vs2.height) {\n                o.height = (vs1.height + (vs2.height - vs1.height) * p).toInt()\n                lpChanged = true\n            }\n            (o as? ViewGroup.MarginLayoutParams)?.let {\n                if (vs1.topMargin != vs2.topMargin) {\n                    it.topMargin = (vs1.topMargin + (vs2.topMargin - vs1.topMargin) * p).toInt()\n                    lpChanged = true\n                }\n                if (vs1.bottomMargin != vs2.bottomMargin) {\n                    it.bottomMargin = (vs1.bottomMargin + (vs2.bottomMargin - vs1.bottomMargin) * p).toInt()\n                    lpChanged = true\n                }\n                if (vs1.leftMargin != vs2.leftMargin) {\n                    it.leftMargin = (vs1.leftMargin + (vs2.leftMargin - vs1.leftMargin) * p).toInt()\n                    lpChanged = true\n                }\n                if (vs1.topMargin != vs2.topMargin) {\n                    it.topMargin = (vs1.topMargin + (vs2.topMargin - vs1.topMargin) * p).toInt()\n                    lpChanged = true\n                }\n            }\n            if (lpChanged) layoutParams = o\n        }\n    }\n}\n\nfun Any?.statesChangeByAnimation(views: Array<View>, tag1: Int, tag2: Int, start: Float = 0F, end: Float = 1F, updateCallback: AnimationUpdateListener? = null, updateStateListener: AnimatorListenerAdapter? = null, duration1: Long = 400L, startDelay1: Long = 0L): ValueAnimator {\n    return ValueAnimator.ofFloat(start, end).apply {\n        startDelay = startDelay1\n        duration = duration1\n        interpolator = AccelerateDecelerateInterpolator()\n        addUpdateListener { animation ->\n            val p = animation.animatedValue as Float\n            updateCallback?.onAnimationUpdate(tag1, tag2, p)\n            for (it in views) it.stateRefresh(tag1, tag2, animation.animatedValue as Float)\n        }\n        updateStateListener?.let { addListener(it) }\n\n        start()\n    }\n}\n\ninterface AnimationUpdateListener {\n    fun onAnimationUpdate(tag1: Int, tag2: Int, p: Float)\n}"
  },
  {
    "path": "app/src/main/res/drawable/ic_launcher_background.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"108dp\"\n    android:height=\"108dp\"\n    android:viewportHeight=\"108\"\n    android:viewportWidth=\"108\">\n    <path\n        android:fillColor=\"#26A69A\"\n        android:pathData=\"M0,0h108v108h-108z\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M9,0L9,108\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M19,0L19,108\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M29,0L29,108\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M39,0L39,108\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M49,0L49,108\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M59,0L59,108\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M69,0L69,108\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M79,0L79,108\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M89,0L89,108\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M99,0L99,108\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,9L108,9\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,19L108,19\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,29L108,29\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,39L108,39\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,49L108,49\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,59L108,59\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,69L108,69\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,79L108,79\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,89L108,89\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M0,99L108,99\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M19,29L89,29\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M19,39L89,39\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M19,49L89,49\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M19,59L89,59\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M19,69L89,69\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M19,79L89,79\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M29,19L29,89\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M39,19L39,89\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M49,19L49,89\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M59,19L59,89\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M69,19L69,89\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n    <path\n        android:fillColor=\"#00000000\"\n        android:pathData=\"M79,19L79,89\"\n        android:strokeColor=\"#33FFFFFF\"\n        android:strokeWidth=\"0.8\" />\n</vector>\n"
  },
  {
    "path": "app/src/main/res/drawable/merchant_search_shape.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <solid android:color=\"#E8E8E8\" />\n    <corners android:radius=\"2dp\" />\n</shape>\n"
  },
  {
    "path": "app/src/main/res/drawable/settle_submit_shape.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <gradient\n        android:endColor=\"#ffb818\"\n        android:startColor=\"#ffd160\" />\n</shape>\n"
  },
  {
    "path": "app/src/main/res/drawable/shadow_b_000_shape.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <gradient\n        android:angle=\"90\"\n        android:endColor=\"#00000000\"\n        android:startColor=\"#99000000\" />\n</shape>\n"
  },
  {
    "path": "app/src/main/res/drawable/shadow_b_fff_shape.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <gradient\n        android:angle=\"90\"\n        android:centerColor=\"#ccffffff\"\n        android:endColor=\"#00ffffff\"\n        android:startColor=\"#ffffffff\" />\n</shape>\n"
  },
  {
    "path": "app/src/main/res/drawable/tab_title_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"#313131\" android:state_selected=\"true\" />\n    <item android:color=\"#666\" />\n</selector>"
  },
  {
    "path": "app/src/main/res/drawable/transparent.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <solid android:color=\"@android:color/transparent\" />\n</shape>"
  },
  {
    "path": "app/src/main/res/layout/merchant_activity.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.design.widget.CoordinatorLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:background=\"@android:color/white\"\n    android:focusable=\"true\"\n    android:focusableInTouchMode=\"true\">\n\n    <com.example.learn.business.MerchantContentLayout\n        android:id=\"@+id/layContent\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\" />\n\n    <com.example.learn.business.MerchantPageLayout\n        android:id=\"@+id/layPage\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:layout_marginTop=\"@dimen/merchant_offset\"\n        app:layout_behavior=\"@string/view_behavior_merchant_page\" />\n\n    <com.example.learn.business.MerchantTitleLayout\n        android:id=\"@+id/layTitle\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\" />\n\n    <com.example.learn.business.MerchantSettleLayout\n        android:id=\"@+id/laySettle\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:layout_gravity=\"bottom\" />\n</android.support.design.widget.CoordinatorLayout>"
  },
  {
    "path": "app/src/main/res/layout/merchant_content_layout.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <ImageView\n        android:id=\"@+id/vCover\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"128dp\"\n        android:contentDescription=\"@string/app_name\"\n        android:scaleType=\"centerCrop\"\n        app:layout_constraintLeft_toLeftOf=\"parent\"\n        app:layout_constraintRight_toRightOf=\"parent\" />\n\n\n    <ImageView\n        android:id=\"@+id/vCoverShadow\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"70dp\"\n        android:background=\"@drawable/shadow_b_000_shape\"\n        android:contentDescription=\"@string/app_name\"\n        app:layout_constraintBottom_toBottomOf=\"@+id/vCover\"\n        app:layout_constraintLeft_toLeftOf=\"parent\"\n        app:layout_constraintRight_toRightOf=\"parent\" />\n\n\n    <LinearLayout\n        android:id=\"@+id/laySimple\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"8dp\"\n        android:layout_marginStart=\"8dp\"\n        android:orientation=\"vertical\"\n        app:layout_constraintBottom_toBottomOf=\"@+id/vCover\"\n        app:layout_constraintLeft_toRightOf=\"@id/vAvatar\"\n        app:layout_constraintRight_toRightOf=\"parent\">\n\n        <TextView\n            android:id=\"@+id/vMerchant\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginBottom=\"3dp\"\n            android:text=\"鲜粥道（小熊熬粥）\"\n            android:textColor=\"#FFF\"\n            android:textSize=\"18dp\"\n            android:textStyle=\"bold\" />\n\n        <TextView\n            android:id=\"@+id/vMerchantTip\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginBottom=\"6dp\"\n            android:layout_marginEnd=\"@dimen/edge\"\n            android:layout_marginRight=\"@dimen/edge\"\n            android:ellipsize=\"end\"\n            android:singleLine=\"true\"\n            android:text=\"公告：本店已切换电子发票，如需开票请扫描账...\"\n            android:textColor=\"#C8C8C8\"\n            android:textSize=\"11dp\" />\n\n        <LinearLayout\n            android:id=\"@+id/vMerchantTip2\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginBottom=\"8dp\"\n            android:gravity=\"center_vertical\"\n            android:orientation=\"horizontal\">\n\n            <TextView\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginRight=\"10dp\"\n                android:background=\"@mipmap/tip\"\n                android:ellipsize=\"end\"\n                android:singleLine=\"true\"\n                android:text=\"''味道赞''\"\n                android:textColor=\"#F7D180\"\n                android:textSize=\"11dp\" />\n\n            <TextView\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginRight=\"10dp\"\n                android:background=\"@mipmap/tip\"\n                android:ellipsize=\"end\"\n                android:singleLine=\"true\"\n                android:text=\"''服务好''\"\n                android:textColor=\"#F7D180\"\n                android:textSize=\"11dp\" />\n\n            <TextView\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginRight=\"10dp\"\n                android:background=\"@mipmap/tip\"\n                android:ellipsize=\"end\"\n                android:singleLine=\"true\"\n                android:text=\"''包装好''\"\n                android:textColor=\"#F7D180\"\n                android:textSize=\"11dp\" />\n\n            <TextView\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginRight=\"10dp\"\n                android:background=\"@mipmap/tip\"\n                android:ellipsize=\"end\"\n                android:singleLine=\"true\"\n                android:text=\"''分量足''\"\n                android:textColor=\"#F7D180\"\n                android:textSize=\"11dp\" />\n\n        </LinearLayout>\n\n\n    </LinearLayout>\n\n\n    <com.mixiaoxiao.overscroll.OverScrollScrollView\n        android:id=\"@+id/layScroll\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"0dp\"\n        android:fadingEdge=\"none\"\n        android:fadingEdgeLength=\"0dp\"\n        android:fillViewport=\"true\"\n        android:scrollbars=\"vertical\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintLeft_toLeftOf=\"parent\"\n        app:layout_constraintRight_toRightOf=\"parent\"\n        app:layout_constraintTop_toBottomOf=\"@id/vCover\">\n\n        <android.support.constraint.ConstraintLayout\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:orientation=\"vertical\"\n            android:paddingBottom=\"55dp\">\n\n            <TextView\n                android:id=\"@+id/vMerchantName\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_gravity=\"center_horizontal\"\n                android:layout_marginTop=\"25dp\"\n                android:alpha=\"0\"\n                android:gravity=\"center\"\n                android:text=\"鲜粥道（小熊熬粥）\"\n                android:textColor=\"#333\"\n                android:textSize=\"20dp\"\n                android:textStyle=\"bold\"\n                app:layout_constraintLeft_toLeftOf=\"parent\"\n                app:layout_constraintRight_toRightOf=\"parent\"\n                app:layout_constraintTop_toTopOf=\"parent\" />\n\n            <HorizontalScrollView\n                android:id=\"@+id/layTicket\"\n                android:layout_width=\"0dp\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginTop=\"15dp\"\n                android:clipToPadding=\"false\"\n                android:orientation=\"horizontal\"\n                android:overScrollMode=\"never\"\n                android:paddingLeft=\"@dimen/edge\"\n                android:paddingStart=\"@dimen/edge\"\n                android:scrollbars=\"none\"\n                app:layout_constraintLeft_toLeftOf=\"parent\"\n                app:layout_constraintRight_toRightOf=\"parent\"\n                app:layout_constraintTop_toTopOf=\"parent\">\n\n                <LinearLayout\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"match_parent\"\n                    android:orientation=\"horizontal\">\n\n                    <com.example.learn.business.TicketView\n                        android:id=\"@+id/vTicket1\"\n                        android:layout_width=\"wrap_content\"\n                        android:layout_height=\"wrap_content\"\n                        android:layout_marginEnd=\"10dp\"\n                        android:layout_marginRight=\"10dp\" />\n\n                    <com.example.learn.business.TicketView\n                        android:id=\"@+id/vTicket2\"\n                        android:layout_width=\"wrap_content\"\n                        android:layout_height=\"wrap_content\"\n                        android:layout_marginEnd=\"10dp\"\n                        android:layout_marginRight=\"10dp\" />\n                </LinearLayout>\n            </HorizontalScrollView>\n\n            <TextView\n                android:id=\"@+id/vt1\"\n                android:layout_width=\"16dp\"\n                android:layout_height=\"16dp\"\n                android:layout_marginLeft=\"@dimen/edge\"\n                android:layout_marginStart=\"@dimen/edge\"\n                android:layout_marginTop=\"10dp\"\n                android:background=\"#FF635B\"\n                android:gravity=\"center\"\n                android:text=\"减\"\n                android:textColor=\"#FFF\"\n                android:textSize=\"12dp\"\n                app:layout_constraintLeft_toLeftOf=\"parent\"\n                app:layout_constraintTop_toBottomOf=\"@id/layTicket\" />\n\n            <TextView\n                android:id=\"@+id/vt111\"\n                android:layout_width=\"0dp\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginEnd=\"@dimen/edge\"\n                android:layout_marginLeft=\"3dp\"\n                android:layout_marginRight=\"@dimen/edge\"\n                android:layout_marginStart=\"3dp\"\n                android:gravity=\"center_vertical\"\n                android:text=\"满25减15；满49减20；满79减22\"\n                android:textColor=\"#333\"\n                android:textSize=\"12dp\"\n                app:layout_constraintLeft_toRightOf=\"@+id/vt1\"\n                app:layout_constraintRight_toLeftOf=\"@id/vSwitch\"\n                app:layout_constraintTop_toBottomOf=\"@id/layTicket\"\n                app:layout_constraintTop_toTopOf=\"@+id/vt1\" />\n\n            <TextView\n                android:id=\"@+id/vSwitch\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"16dp\"\n                android:contentDescription=\"@string/app_name\"\n                android:gravity=\"center_vertical\"\n                android:orientation=\"horizontal\"\n                android:text=\"5个活动\"\n                android:textColor=\"#9A9A9A\"\n                android:textSize=\"12dp\"\n                app:layout_constraintRight_toLeftOf=\"@id/vSwitchIcon\"\n                app:layout_constraintTop_toTopOf=\"@id/vt1\" />\n\n            <ImageView\n                android:id=\"@+id/vSwitchIcon\"\n                android:layout_width=\"16dp\"\n                android:layout_height=\"16dp\"\n                android:layout_marginEnd=\"@dimen/edge\"\n                android:layout_marginRight=\"@dimen/edge\"\n                android:contentDescription=\"@string/app_name\"\n                android:gravity=\"center_vertical\"\n                android:orientation=\"horizontal\"\n                android:src=\"@mipmap/menu_switch\"\n                app:layout_constraintRight_toRightOf=\"parent\"\n                app:layout_constraintTop_toTopOf=\"@id/vt1\" />\n\n            <TextView\n                android:id=\"@+id/vt2\"\n                android:layout_width=\"16dp\"\n                android:layout_height=\"16dp\"\n                android:layout_marginLeft=\"@dimen/edge\"\n                android:layout_marginStart=\"@dimen/edge\"\n                android:layout_marginTop=\"10dp\"\n                android:alpha=\"0\"\n                android:background=\"#FF7298\"\n                android:gravity=\"center\"\n                android:text=\"领\"\n                android:textColor=\"#FFF\"\n                android:textSize=\"12dp\"\n                app:layout_constraintLeft_toLeftOf=\"parent\"\n                app:layout_constraintTop_toBottomOf=\"@id/vt111\" />\n\n            <TextView\n                android:id=\"@+id/vt222\"\n                android:layout_width=\"0dp\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginEnd=\"@dimen/edge\"\n                android:layout_marginLeft=\"3dp\"\n                android:layout_marginRight=\"@dimen/edge\"\n                android:layout_marginStart=\"3dp\"\n                android:alpha=\"0\"\n                android:gravity=\"center_vertical\"\n                android:text=\"有机会领取商家代金券\"\n                android:textColor=\"#333\"\n                android:textSize=\"12dp\"\n                app:layout_constraintLeft_toRightOf=\"@+id/vt2\"\n                app:layout_constraintRight_toRightOf=\"parent\"\n                app:layout_constraintTop_toBottomOf=\"@id/vt1\"\n                app:layout_constraintTop_toTopOf=\"@+id/vt2\" />\n\n            <TextView\n                android:id=\"@+id/vt3\"\n                android:layout_width=\"16dp\"\n                android:layout_height=\"16dp\"\n                android:layout_marginLeft=\"@dimen/edge\"\n                android:layout_marginStart=\"@dimen/edge\"\n                android:layout_marginTop=\"10dp\"\n                android:alpha=\"0\"\n                android:background=\"#FC4343\"\n                android:gravity=\"center\"\n                android:text=\"返\"\n                android:textColor=\"#FFF\"\n                android:textSize=\"12dp\"\n                app:layout_constraintLeft_toLeftOf=\"parent\"\n                app:layout_constraintTop_toBottomOf=\"@id/vt222\" />\n\n            <TextView\n                android:id=\"@+id/vt333\"\n                android:layout_width=\"0dp\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginEnd=\"@dimen/edge\"\n                android:layout_marginLeft=\"3dp\"\n                android:layout_marginRight=\"@dimen/edge\"\n                android:layout_marginStart=\"3dp\"\n                android:alpha=\"0\"\n                android:gravity=\"center_vertical\"\n                android:text=\"实际支付27元返2元商家代金券\"\n                android:textColor=\"#333\"\n                android:textSize=\"12dp\"\n                app:layout_constraintLeft_toRightOf=\"@+id/vt3\"\n                app:layout_constraintRight_toRightOf=\"parent\"\n                app:layout_constraintTop_toBottomOf=\"@id/vt2\"\n                app:layout_constraintTop_toTopOf=\"@+id/vt3\" />\n\n            <TextView\n                android:id=\"@+id/vt4\"\n                android:layout_width=\"16dp\"\n                android:layout_height=\"16dp\"\n                android:layout_marginLeft=\"@dimen/edge\"\n                android:layout_marginStart=\"@dimen/edge\"\n                android:layout_marginTop=\"10dp\"\n                android:alpha=\"0\"\n                android:background=\"#FEC51F\"\n                android:gravity=\"center\"\n                android:text=\"首\"\n                android:textColor=\"#FFF\"\n                android:textSize=\"12dp\"\n                app:layout_constraintLeft_toLeftOf=\"parent\"\n                app:layout_constraintTop_toBottomOf=\"@id/vt333\" />\n\n            <TextView\n                android:id=\"@+id/vt444\"\n                android:layout_width=\"0dp\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginEnd=\"@dimen/edge\"\n                android:layout_marginLeft=\"3dp\"\n                android:layout_marginRight=\"@dimen/edge\"\n                android:layout_marginStart=\"3dp\"\n                android:alpha=\"0\"\n                android:gravity=\"center_vertical\"\n                android:text=\"新用户立减26元，首次使用美团支付最高再减3元！首次使用美团支付最高再减3元！首次使用美团支付最高再减3元！\"\n                android:textColor=\"#333\"\n                android:textSize=\"12dp\"\n                app:layout_constraintLeft_toRightOf=\"@+id/vt4\"\n                app:layout_constraintRight_toRightOf=\"parent\"\n                app:layout_constraintTop_toBottomOf=\"@id/vt3\"\n                app:layout_constraintTop_toTopOf=\"@+id/vt4\" />\n\n            <TextView\n                android:id=\"@+id/vt5\"\n                android:layout_width=\"16dp\"\n                android:layout_height=\"16dp\"\n                android:layout_marginLeft=\"@dimen/edge\"\n                android:layout_marginStart=\"@dimen/edge\"\n                android:layout_marginTop=\"10dp\"\n                android:alpha=\"0\"\n                android:background=\"#FFA628\"\n                android:gravity=\"center\"\n                android:text=\"赠\"\n                android:textColor=\"#FFF\"\n                android:textSize=\"12dp\"\n                app:layout_constraintLeft_toLeftOf=\"parent\"\n                app:layout_constraintTop_toBottomOf=\"@id/vt444\" />\n\n            <TextView\n                android:id=\"@+id/vt555\"\n                android:layout_width=\"0dp\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginEnd=\"@dimen/edge\"\n                android:layout_marginLeft=\"3dp\"\n                android:layout_marginRight=\"@dimen/edge\"\n                android:layout_marginStart=\"3dp\"\n                android:alpha=\"0\"\n                android:gravity=\"center_vertical\"\n                android:text=\"满52元赠送酸辣豇豆\"\n                android:textColor=\"#333\"\n                android:textSize=\"12dp\"\n                app:layout_constraintLeft_toRightOf=\"@+id/vt5\"\n                app:layout_constraintRight_toRightOf=\"parent\"\n                app:layout_constraintTop_toBottomOf=\"@id/vt4\"\n                app:layout_constraintTop_toTopOf=\"@+id/vt5\" />\n\n            <TextView\n                android:id=\"@+id/vt51\"\n                android:layout_width=\"0dp\"\n                android:layout_height=\"0dp\"\n                android:layout_marginLeft=\"@dimen/edge\"\n                android:layout_marginRight=\"@dimen/edge\"\n                android:layout_marginTop=\"25dp\"\n                android:text=\"印象墙\"\n                android:textColor=\"#333\"\n                android:textSize=\"15sp\"\n                android:textStyle=\"bold\"\n                app:layout_constraintLeft_toLeftOf=\"parent\"\n                app:layout_constraintRight_toRightOf=\"parent\"\n                app:layout_constraintTop_toBottomOf=\"@+id/vt5\" />\n\n            <com.zhy.view.flowlayout.FlowLayout\n                android:id=\"@+id/vt512\"\n                android:layout_width=\"0dp\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginLeft=\"@dimen/edge\"\n                android:layout_marginRight=\"@dimen/edge\"\n                android:gravity=\"center_vertical\"\n                android:orientation=\"horizontal\"\n                app:layout_constraintLeft_toLeftOf=\"parent\"\n                app:layout_constraintRight_toRightOf=\"parent\"\n                app:layout_constraintTop_toBottomOf=\"@+id/vt51\">\n\n                <TextView\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginEnd=\"10dp\"\n                    android:layout_marginRight=\"10dp\"\n                    android:layout_marginTop=\"8dp\"\n                    android:background=\"@mipmap/tip_2\"\n                    android:ellipsize=\"end\"\n                    android:singleLine=\"true\"\n                    android:text=\"''味道赞''\"\n                    android:textColor=\"#333\"\n                    android:textSize=\"11dp\" />\n\n                <TextView\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginEnd=\"10dp\"\n                    android:layout_marginRight=\"10dp\"\n                    android:layout_marginTop=\"8dp\"\n                    android:background=\"@mipmap/tip_2\"\n                    android:ellipsize=\"end\"\n                    android:singleLine=\"true\"\n                    android:text=\"''包装好''\"\n                    android:textColor=\"#333\"\n                    android:textSize=\"11dp\" />\n\n                <TextView\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginEnd=\"10dp\"\n                    android:layout_marginRight=\"10dp\"\n                    android:layout_marginTop=\"8dp\"\n                    android:background=\"@mipmap/tip_2\"\n                    android:ellipsize=\"end\"\n                    android:singleLine=\"true\"\n                    android:text=\"''配送速度快''\"\n                    android:textColor=\"#333\"\n                    android:textSize=\"11dp\" />\n\n                <TextView\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginEnd=\"10dp\"\n                    android:layout_marginRight=\"10dp\"\n                    android:layout_marginTop=\"8dp\"\n                    android:background=\"@mipmap/tip_2\"\n                    android:ellipsize=\"end\"\n                    android:singleLine=\"true\"\n                    android:text=\"''分量足''\"\n                    android:textColor=\"#333\"\n                    android:textSize=\"11dp\" />\n\n                <TextView\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginEnd=\"10dp\"\n                    android:layout_marginRight=\"10dp\"\n                    android:layout_marginTop=\"8dp\"\n                    android:background=\"@mipmap/tip_2\"\n                    android:ellipsize=\"end\"\n                    android:singleLine=\"true\"\n                    android:text=\"''价格实惠''\"\n                    android:textColor=\"#333\"\n                    android:textSize=\"11dp\" />\n\n                <TextView\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginEnd=\"10dp\"\n                    android:layout_marginRight=\"10dp\"\n                    android:layout_marginTop=\"8dp\"\n                    android:background=\"@mipmap/tip_2\"\n                    android:ellipsize=\"end\"\n                    android:singleLine=\"true\"\n                    android:text=\"''服务好''\"\n                    android:textColor=\"#333\"\n                    android:textSize=\"11dp\" />\n\n                <TextView\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginEnd=\"10dp\"\n                    android:layout_marginRight=\"10dp\"\n                    android:layout_marginTop=\"8dp\"\n                    android:background=\"@mipmap/tip_2\"\n                    android:ellipsize=\"end\"\n                    android:singleLine=\"true\"\n                    android:text=\"''人品好''\"\n                    android:textColor=\"#333\"\n                    android:textSize=\"11dp\" />\n\n                <TextView\n                    android:layout_width=\"wrap_content\"\n                    android:layout_height=\"wrap_content\"\n                    android:layout_marginEnd=\"10dp\"\n                    android:layout_marginRight=\"10dp\"\n                    android:layout_marginTop=\"8dp\"\n                    android:background=\"@mipmap/tip_2\"\n                    android:ellipsize=\"end\"\n                    android:singleLine=\"true\"\n                    android:text=\"''粥不错''\"\n                    android:textColor=\"#333\"\n                    android:textSize=\"11dp\" />\n\n\n            </com.zhy.view.flowlayout.FlowLayout>\n\n            <TextView\n                android:id=\"@+id/vt52\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"0dp\"\n                android:layout_marginLeft=\"@dimen/edge\"\n                android:layout_marginRight=\"@dimen/edge\"\n                android:layout_marginTop=\"25dp\"\n                android:text=\"配送\"\n                android:textColor=\"#333\"\n                android:textSize=\"15sp\"\n                android:textStyle=\"bold\"\n                app:layout_constraintLeft_toLeftOf=\"parent\"\n                app:layout_constraintTop_toBottomOf=\"@+id/vt512\" />\n\n            <TextView\n                android:id=\"@+id/vt53\"\n                android:layout_width=\"0dp\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginLeft=\"@dimen/edge\"\n                android:layout_marginRight=\"@dimen/edge\"\n                android:layout_marginTop=\"8dp\"\n                android:text=\"起送￥20 | 配送￥5 | 44分钟\"\n                android:textColor=\"#656565\"\n                android:textSize=\"11sp\"\n                app:layout_constraintLeft_toLeftOf=\"parent\"\n                app:layout_constraintRight_toRightOf=\"parent\"\n                app:layout_constraintTop_toBottomOf=\"@+id/vt52\" />\n\n\n            <TextView\n                android:id=\"@+id/vt6\"\n\n                android:layout_width=\"0dp\"\n                android:layout_height=\"0dp\"\n                android:layout_marginLeft=\"@dimen/edge\"\n                android:layout_marginRight=\"@dimen/edge\"\n                android:layout_marginTop=\"25dp\"\n                android:text=\"公告\"\n                android:textColor=\"#333\"\n                android:textSize=\"15sp\"\n                android:textStyle=\"bold\"\n                app:layout_constraintLeft_toLeftOf=\"parent\"\n                app:layout_constraintRight_toRightOf=\"parent\"\n                app:layout_constraintTop_toBottomOf=\"@+id/vt53\" />\n\n            <TextView\n                android:id=\"@+id/vt7\"\n                android:layout_width=\"match_parent\"\n                android:layout_height=\"wrap_content\"\n                android:layout_marginLeft=\"@dimen/edge\"\n                android:layout_marginRight=\"@dimen/edge\"\n                android:layout_marginTop=\"8dp\"\n                android:text=\"滴滴滴，感谢您对备点的支持。点击右上角收藏我们，将免费领取礼品一份噢。欢迎亲们给我们推荐礼品的种类，可评价留言。滴滴滴。\"\n                android:textColor=\"#656565\"\n                android:textSize=\"11sp\"\n                app:layout_constraintTop_toBottomOf=\"@+id/vt6\" />\n\n\n        </android.support.constraint.ConstraintLayout>\n    </com.mixiaoxiao.overscroll.OverScrollScrollView>\n\n    <ImageView\n        android:id=\"@+id/vAvatar\"\n        android:layout_width=\"81.5dp\"\n        android:layout_height=\"81.5dp\"\n        android:layout_marginLeft=\"@dimen/edge\"\n        android:layout_marginStart=\"@dimen/edge\"\n        android:layout_marginTop=\"55dp\"\n        android:background=\"@mipmap/avatar_border\"\n        android:contentDescription=\"@string/app_name\"\n        android:padding=\"10dp\"\n        android:scaleType=\"fitXY\"\n        android:src=\"@mipmap/avatar\"\n        app:layout_constraintLeft_toLeftOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"parent\" />\n\n\n    <ImageView\n        android:id=\"@+id/vHide\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"50dp\"\n        android:background=\"@drawable/shadow_b_fff_shape\"\n        android:scaleType=\"center\"\n        android:src=\"@mipmap/menu_back\"\n        app:layout_constraintBottom_toBottomOf=\"parent\" />\n\n\n</android.support.constraint.ConstraintLayout>\n\n"
  },
  {
    "path": "app/src/main/res/layout/merchant_food_list_content.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_marginLeft=\"@dimen/merchant_side_width\"\n    android:layout_marginStart=\"@dimen/merchant_side_width\"\n    android:layout_height=\"wrap_content\"\n    android:paddingBottom=\"15dp\"\n    android:paddingLeft=\"@dimen/edge\"\n    android:paddingRight=\"@dimen/edge\"\n    android:paddingTop=\"15dp\">\n\n    <ImageView\n        android:id=\"@+id/vIcon\"\n        android:layout_width=\"76dp\"\n        android:layout_height=\"76dp\"\n        android:contentDescription=\"@string/app_name\"\n        app:layout_constraintLeft_toLeftOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"parent\" />\n\n    <TextView\n        android:id=\"@+id/vName\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"8dp\"\n        android:layout_marginStart=\"8dp\"\n        android:ellipsize=\"end\"\n        android:singleLine=\"true\"\n        android:textColor=\"#333\"\n        android:textSize=\"15sp\"\n        android:textStyle=\"bold\"\n        app:layout_constraintLeft_toRightOf=\"@id/vIcon\"\n        app:layout_constraintRight_toRightOf=\"parent\" />\n\n    <TextView\n        android:id=\"@+id/vDesc\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"8dp\"\n        android:layout_marginStart=\"8dp\"\n        android:layout_marginTop=\"0dp\"\n        android:ellipsize=\"end\"\n        android:singleLine=\"true\"\n        android:textColor=\"#999\"\n        android:textSize=\"12sp\"\n        app:layout_constraintLeft_toRightOf=\"@id/vIcon\"\n        app:layout_constraintRight_toRightOf=\"parent\"\n        app:layout_constraintTop_toBottomOf=\"@id/vName\" />\n\n    <TextView\n        android:id=\"@+id/vSell\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"8dp\"\n        android:layout_marginStart=\"8dp\"\n        android:layout_marginTop=\"0dp\"\n        android:ellipsize=\"end\"\n        android:singleLine=\"true\"\n        android:text=\"月售2187\"\n        android:textColor=\"#999\"\n        android:textSize=\"12sp\"\n        app:layout_constraintLeft_toRightOf=\"@id/vIcon\"\n        app:layout_constraintTop_toBottomOf=\"@id/vDesc\" />\n\n    <TextView\n        android:id=\"@+id/vPraise\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"8dp\"\n        android:layout_marginStart=\"8dp\"\n        android:layout_marginTop=\"0dp\"\n        android:ellipsize=\"end\"\n        android:singleLine=\"true\"\n        android:text=\"赞60\"\n        android:textColor=\"#999\"\n        android:textSize=\"12sp\"\n        app:layout_constraintLeft_toRightOf=\"@id/vSell\"\n        app:layout_constraintTop_toBottomOf=\"@id/vDesc\" />\n\n\n    <TextView\n        android:id=\"@+id/vPrice\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"8dp\"\n        android:layout_marginStart=\"8dp\"\n        android:ellipsize=\"end\"\n        android:singleLine=\"true\"\n        android:textColor=\"#FB4E44\"\n        android:textSize=\"17sp\"\n        android:textStyle=\"bold\"\n        app:layout_constraintLeft_toRightOf=\"@id/vIcon\"\n        app:layout_constraintRight_toLeftOf=\"@id/vAdd\"\n        app:layout_constraintTop_toBottomOf=\"@id/vSell\" />\n\n    <ImageView\n        android:id=\"@+id/vAdd\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:contentDescription=\"@string/app_name\"\n        android:src=\"@mipmap/add\"\n        app:layout_constraintBottom_toBottomOf=\"@id/vPrice\"\n        app:layout_constraintLeft_toRightOf=\"@id/vPrice\"\n        app:layout_constraintRight_toRightOf=\"parent\" />\n\n</android.support.constraint.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/merchant_food_list_content_image.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:layout_marginLeft=\"@dimen/merchant_side_width\"\n    android:layout_marginStart=\"@dimen/merchant_side_width\"\n    android:paddingBottom=\"5dp\"\n    android:paddingTop=\"5dp\">\n\n    <ImageView\n        android:id=\"@+id/vImage\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"0dp\"\n        android:layout_marginLeft=\"@dimen/edge\"\n        android:layout_marginRight=\"@dimen/edge\"\n        android:contentDescription=\"@string/app_name\"\n        app:layout_constraintDimensionRatio=\"780:242\"\n        app:layout_constraintLeft_toLeftOf=\"parent\"\n        app:layout_constraintRight_toRightOf=\"parent\" />\n</android.support.constraint.ConstraintLayout>\n\n"
  },
  {
    "path": "app/src/main/res/layout/merchant_food_list_recommend.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<com.example.learn.business.MyEventLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:paddingBottom=\"10dp\">\n\n    <android.support.v7.widget.RecyclerView\n        android:id=\"@+id/vRecommends\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:clipToPadding=\"false\"\n        android:orientation=\"horizontal\"\n        android:overScrollMode=\"never\"\n        android:paddingLeft=\"5dp\"\n        android:paddingRight=\"5dp\"\n        app:layoutManager=\"android.support.v7.widget.LinearLayoutManager\" />\n</com.example.learn.business.MyEventLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/merchant_food_list_recommend_cell.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"122dp\"\n    android:layout_height=\"wrap_content\"\n    android:background=\"@mipmap/avatar_border\"\n    android:paddingBottom=\"5.5dp\"\n    android:paddingLeft=\"5dp\"\n    android:paddingRight=\"5dp\"\n    android:paddingTop=\"6dp\">\n\n    <ImageView\n        android:id=\"@+id/vImage\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"0dp\"\n        android:contentDescription=\"@string/app_name\"\n        app:layout_constraintDimensionRatio=\"360:270\"\n        app:layout_constraintLeft_toLeftOf=\"parent\"\n        app:layout_constraintRight_toRightOf=\"parent\" />\n\n    <TextView\n        android:id=\"@+id/vName\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:ellipsize=\"end\"\n        android:gravity=\"center_vertical\"\n        android:minHeight=\"26dp\"\n        android:paddingLeft=\"5dp\"\n        android:paddingRight=\"5dp\"\n        android:singleLine=\"true\"\n        android:textColor=\"#333\"\n        android:textSize=\"12sp\"\n        app:layout_constraintLeft_toLeftOf=\"parent\"\n        app:layout_constraintRight_toRightOf=\"parent\"\n        app:layout_constraintTop_toBottomOf=\"@id/vImage\" />\n\n    <TextView\n        android:id=\"@+id/vPrice\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginBottom=\"6dp\"\n        android:gravity=\"center_vertical\"\n        android:paddingLeft=\"5dp\"\n        android:paddingRight=\"5dp\"\n        android:singleLine=\"true\"\n        android:textColor=\"#F9514E\"\n        android:textSize=\"15dp\"\n        android:textStyle=\"bold\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintLeft_toLeftOf=\"parent\"\n        app:layout_constraintRight_toLeftOf=\"@id/vAdd\"\n        app:layout_constraintTop_toBottomOf=\"@id/vName\" />\n\n    <ImageView\n        android:id=\"@+id/vAdd\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginBottom=\"6dp\"\n        android:contentDescription=\"@string/app_name\"\n        android:paddingLeft=\"7dp\"\n        android:paddingRight=\"7dp\"\n        android:src=\"@mipmap/add\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintLeft_toRightOf=\"@id/vPrice\"\n        app:layout_constraintRight_toRightOf=\"parent\"\n        app:layout_constraintTop_toBottomOf=\"@id/vName\" />\n\n\n</android.support.constraint.ConstraintLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/merchant_food_list_side.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<TextView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:id=\"@+id/vTitle\"\n    android:layout_width=\"@dimen/merchant_side_width\"\n    android:layout_height=\"wrap_content\"\n    android:ellipsize=\"end\"\n    android:gravity=\"center_vertical\"\n    android:maxLines=\"2\"\n    android:minHeight=\"50dp\"\n    android:paddingBottom=\"16dp\"\n    android:paddingLeft=\"@dimen/edge\"\n    android:paddingRight=\"@dimen/edge\"\n    android:paddingTop=\"16dp\"\n    android:textColor=\"#333\"\n    android:textSize=\"13sp\" />"
  },
  {
    "path": "app/src/main/res/layout/merchant_food_list_sticky_title.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:layout_marginLeft=\"@dimen/merchant_side_width\"\n    android:layout_marginStart=\"@dimen/merchant_side_width\"\n    android:background=\"@android:color/transparent\">\n\n    <TextView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:id=\"@+id/vTitle\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:background=\"#33ffffff\"\n        android:gravity=\"center_vertical\"\n        android:minHeight=\"36dp\"\n        android:paddingBottom=\"2dp\"\n        android:paddingLeft=\"@dimen/edge\"\n        android:paddingRight=\"@dimen/edge\"\n        android:paddingTop=\"2dp\"\n        android:textColor=\"#333\"\n        android:textSize=\"13sp\" />\n</FrameLayout>\n\n"
  },
  {
    "path": "app/src/main/res/layout/merchant_food_list_top.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<TextView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:gravity=\"center_vertical\"\n    android:paddingBottom=\"3dp\"\n    android:paddingLeft=\"@dimen/edge\"\n    android:paddingRight=\"@dimen/edge\"\n    android:paddingTop=\"6dp\"\n    android:text=\"店长推荐\"\n    android:textColor=\"#0d0d0d\"\n    android:textSize=\"12dp\" />"
  },
  {
    "path": "app/src/main/res/layout/merchant_page_cell_layout.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:background=\"#FFF\">\n\n    <android.support.v7.widget.RecyclerView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n        android:id=\"@+id/vRecycler\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:orientation=\"vertical\"\n        app:layoutManager=\"android.support.v7.widget.LinearLayoutManager\" />\n</FrameLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/merchant_page_food_layout.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:background=\"#FFF\">\n\n    <android.support.v7.widget.RecyclerView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n        android:id=\"@+id/vRecycler\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:orientation=\"vertical\"\n        app:layoutManager=\"android.support.v7.widget.LinearLayoutManager\" />\n\n\n    <android.support.v7.widget.OverScrollRecyclerView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n        android:id=\"@+id/vSide\"\n        android:layout_width=\"@dimen/merchant_side_width\"\n        android:visibility=\"invisible\"\n        android:layout_height=\"match_parent\"\n        android:background=\"#F7F8F9\"\n        android:orientation=\"vertical\"\n        app:layoutManager=\"android.support.v7.widget.LinearLayoutManager\"/>\n</FrameLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/merchant_page_layout.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:orientation=\"vertical\">\n\n    <com.example.learn.view.SmartTabLayout1\n        android:id=\"@+id/vSmartTab\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"@dimen/merchant_tab_height\"\n        android:background=\"#FFF\"\n        app:stl_defaultTabBackground=\"@android:color/transparent\"\n        app:stl_defaultTabTextColor=\"@drawable/tab_title_selector\"\n        app:stl_defaultTabTextHorizontalPadding=\"@dimen/edge\"\n        app:stl_defaultTabTextSize=\"@dimen/normal\"\n        app:stl_distributeEvenly=\"true\"\n        app:stl_dividerColor=\"@color/divide_line\"\n        app:stl_dividerThickness=\"0dp\"\n        app:stl_indicatorColor=\"#FBB000\"\n        app:stl_indicatorGravity=\"bottom\"\n        app:stl_indicatorInFront=\"true\"\n        app:stl_indicatorInterpolation=\"linear\"\n        app:stl_indicatorThickness=\"2dp\"\n        app:stl_indicatorWidth=\"20dp\"\n        app:stl_underlineColor=\"@color/divide_line\"\n        app:stl_underlineThickness=\"0.5dp\" />\n\n    <com.example.learn.view.ViewPager2\n        android:id=\"@+id/vPager\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:overScrollMode=\"never\" />\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/merchant_settle_layout.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<merge xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\">\n\n    <View\n        android:id=\"@+id/vBg\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"50dp\"\n        android:background=\"#404040\"\n        android:clickable=\"true\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintLeft_toLeftOf=\"parent\"\n        app:layout_constraintRight_toRightOf=\"parent\" />\n\n    <TextView\n        android:id=\"@+id/vSubmit\"\n        android:layout_width=\"110dp\"\n        android:layout_height=\"0dp\"\n        android:background=\"@drawable/settle_submit_shape\"\n        android:clickable=\"true\"\n        android:gravity=\"center\"\n        android:text=\"去结算\"\n        android:textColor=\"#333\"\n        android:textSize=\"16dp\"\n        app:layout_constraintBottom_toBottomOf=\"@id/vBg\"\n        app:layout_constraintRight_toRightOf=\"@id/vBg\"\n        app:layout_constraintTop_toTopOf=\"@id/vBg\" />\n\n\n    <TextView\n        android:id=\"@+id/vPrice\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"6dp\"\n        android:layout_marginStart=\"6dp\"\n        android:text=\"￥33\"\n        android:textColor=\"#FFF\"\n        android:textSize=\"22dp\"\n        app:layout_constraintBottom_toTopOf=\"@id/vTip\"\n        app:layout_constraintLeft_toRightOf=\"@id/vIcon\"\n        app:layout_constraintTop_toTopOf=\"@id/vBg\"\n        app:layout_constraintVertical_chainStyle=\"packed\" />\n\n    <TextView\n        android:id=\"@+id/vTip\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"9dp\"\n        android:layout_marginStart=\"9dp\"\n        android:text=\"另需配送费￥5\"\n        android:textColor=\"#999\"\n        android:textSize=\"11dp\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintLeft_toRightOf=\"@id/vIcon\"\n        app:layout_constraintTop_toBottomOf=\"@id/vPrice\" />\n\n    <TextView\n        android:id=\"@+id/vDiscounts\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"30dp\"\n        android:background=\"#FFF1CF\"\n        android:clickable=\"true\"\n        android:ellipsize=\"end\"\n        android:gravity=\"center\"\n        android:paddingLeft=\"@dimen/edge\"\n        android:paddingRight=\"@dimen/edge\"\n        android:singleLine=\"true\"\n        android:text=\"新用户立减17.0元(在线支付专享)\"\n        android:textColor=\"#333\"\n        android:textSize=\"11dp\"\n        app:layout_constraintBottom_toTopOf=\"@id/vBg\"\n        app:layout_constraintLeft_toLeftOf=\"parent\"\n        app:layout_constraintRight_toRightOf=\"parent\" />\n\n    <ImageView\n        android:id=\"@+id/vIcon\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginLeft=\"@dimen/edge\"\n        android:layout_marginStart=\"@dimen/edge\"\n        android:contentDescription=\"@string/app_name\"\n        android:src=\"@mipmap/settle_1\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintLeft_toLeftOf=\"parent\" />\n\n    <ImageView\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginBottom=\"5dp\"\n        android:layout_marginLeft=\"@dimen/edge\"\n        android:layout_marginRight=\"@dimen/edge\"\n        android:clickable=\"true\"\n        android:contentDescription=\"@string/app_name\"\n        android:gravity=\"center_vertical\"\n        android:orientation=\"horizontal\"\n        android:src=\"@mipmap/bhw\"\n        app:layout_constraintBottom_toTopOf=\"@+id/vDiscounts\"\n        app:layout_constraintLeft_toLeftOf=\"parent\" />\n</merge>\n"
  },
  {
    "path": "app/src/main/res/layout/merchant_title_layout.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:orientation=\"vertical\">\n\n    <ImageView\n        android:id=\"@+id/vSearchBorder\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"0dp\"\n        android:layout_marginBottom=\"9dp\"\n        android:layout_marginTop=\"9dp\"\n        android:alpha=\"0\"\n        android:contentDescription=\"@string/app_name\"\n        android:src=\"@drawable/merchant_search_shape\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintLeft_toRightOf=\"@id/vBack\"\n        app:layout_constraintRight_toLeftOf=\"@id/vCollection\"\n        app:layout_constraintTop_toTopOf=\"parent\" />\n\n    <TextView\n        android:id=\"@+id/vSearchHint\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"0dp\"\n        android:layout_marginLeft=\"28dp\"\n        android:alpha=\"0\"\n        android:gravity=\"start|center_vertical\"\n        android:text=\"请输入商品名称\"\n        android:textColor=\"#989898\"\n        android:textSize=\"12dp\"\n        app:layout_constraintBottom_toBottomOf=\"@id/vSearchBorder\"\n        app:layout_constraintLeft_toLeftOf=\"@id/vSearchBorder\"\n        app:layout_constraintRight_toRightOf=\"@id/vSearchBorder\"\n        app:layout_constraintTop_toTopOf=\"@id/vSearchBorder\" />\n\n\n    <ImageView\n        android:id=\"@+id/vBack\"\n        android:layout_width=\"50dp\"\n        android:layout_height=\"@dimen/title_height\"\n        android:contentDescription=\"@string/app_name\"\n        android:scaleType=\"center\"\n        android:src=\"@mipmap/back_white\" />\n\n    <ImageView\n        android:id=\"@+id/vMenu\"\n        android:layout_width=\"43.5dp\"\n        android:layout_height=\"@dimen/title_height\"\n        android:contentDescription=\"@string/app_name\"\n        android:src=\"@mipmap/icon_menu\"\n        app:layout_constraintRight_toRightOf=\"parent\" />\n\n\n    <ImageView\n        android:id=\"@+id/vTogether\"\n        android:layout_width=\"43.5dp\"\n        android:layout_height=\"@dimen/title_height\"\n        android:contentDescription=\"@string/app_name\"\n        android:src=\"@mipmap/icon_together\"\n        app:layout_constraintRight_toLeftOf=\"@+id/vMenu\" />\n\n    <ImageView\n        android:id=\"@+id/vCollection\"\n        android:layout_width=\"43.5dp\"\n        android:layout_height=\"@dimen/title_height\"\n        android:contentDescription=\"@string/app_name\"\n        android:src=\"@mipmap/icon_collection\"\n        app:layout_constraintRight_toLeftOf=\"@+id/vTogether\" />\n\n    <ImageView\n        android:id=\"@+id/vSearch\"\n        android:layout_width=\"43.5dp\"\n        android:layout_height=\"@dimen/title_height\"\n        android:layout_marginLeft=\"1dp\"\n        android:layout_marginRight=\"1dp\"\n        android:contentDescription=\"@string/app_name\"\n        android:src=\"@mipmap/icon_search\"\n        app:layout_constraintRight_toLeftOf=\"@+id/vCollection\" />\n\n\n</android.support.constraint.ConstraintLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/ticket_view.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<android.support.constraint.ConstraintLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <ImageView\n        android:id=\"@+id/vBorder1\"\n        android:layout_width=\"49dp\"\n        android:layout_height=\"0dp\"\n        android:contentDescription=\"@string/app_name\"\n        android:src=\"@mipmap/ticket_1\"\n        app:layout_constraintDimensionRatio=\"98:40\"\n        app:layout_constraintLeft_toLeftOf=\"parent\" />\n\n    <ImageView\n        android:id=\"@+id/vBorder2\"\n        android:layout_width=\"49dp\"\n        android:layout_height=\"0dp\"\n        android:alpha=\"0\"\n        android:contentDescription=\"@string/app_name\"\n        android:src=\"@mipmap/ticket_2\"\n        app:layout_constraintDimensionRatio=\"98:40\"\n        app:layout_constraintLeft_toLeftOf=\"parent\" />\n\n    <TextView\n        android:id=\"@+id/vSimple\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:ellipsize=\"end\"\n        android:paddingLeft=\"4dp\"\n        android:paddingRight=\"4dp\"\n        android:singleLine=\"true\"\n        android:textColor=\"#D04443\"\n        android:textSize=\"12dp\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"parent\" />\n\n    <android.support.constraint.ConstraintLayout\n        android:id=\"@+id/layDetail\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:alpha=\"0\"\n        android:scaleX=\"0\"\n        android:scaleY=\"0\">\n\n        <TextView\n            android:id=\"@+id/vDetail1\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginBottom=\"4dp\"\n            android:layout_marginLeft=\"12dp\"\n            android:layout_marginStart=\"12dp\"\n            android:textColor=\"#FFF\"\n            android:textSize=\"20dp\"\n            app:layout_constraintBottom_toTopOf=\"@id/vDetail2\"\n            app:layout_constraintLeft_toLeftOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\"\n            app:layout_constraintVertical_chainStyle=\"packed\" />\n\n        <TextView\n            android:id=\"@+id/vDetail2\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginLeft=\"12dp\"\n            android:layout_marginStart=\"12dp\"\n            android:textColor=\"#FFF\"\n            android:textSize=\"11dp\"\n            app:layout_constraintBottom_toTopOf=\"@id/vDetail3\"\n            app:layout_constraintLeft_toLeftOf=\"parent\"\n            app:layout_constraintTop_toBottomOf=\"@id/vDetail1\" />\n\n        <TextView\n            android:id=\"@+id/vDetail3\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginLeft=\"12dp\"\n            android:layout_marginStart=\"12dp\"\n            android:textColor=\"#FFF\"\n            android:textSize=\"11dp\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintLeft_toLeftOf=\"parent\"\n            app:layout_constraintTop_toBottomOf=\"@id/vDetail2\" />\n\n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginEnd=\"5dp\"\n            android:layout_marginRight=\"5dp\"\n            android:text=\"领取\"\n            android:textColor=\"#FFF\"\n            android:textSize=\"17dp\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintHorizontal_bias=\"0.92\"\n            app:layout_constraintLeft_toLeftOf=\"parent\"\n            app:layout_constraintRight_toRightOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\" />\n    </android.support.constraint.ConstraintLayout>\n\n\n</android.support.constraint.ConstraintLayout>\n"
  },
  {
    "path": "app/src/main/res/values/frames.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <!--<color name=\"colorPrimary\">#FFD038</color>-->\n    <!--<color name=\"colorPrimaryDark\">#EEC027</color>-->\n    <!--<color name=\"colorAccent\">#EEC027</color>-->\n    <color name=\"colorPrimary\">#000</color>\n    <color name=\"colorPrimaryDark\">#000</color>\n    <color name=\"colorAccent\">#000</color>\n    <!-- Base application theme. -->\n    <style name=\"AppTheme\" parent=\"Theme.AppCompat.Light.NoActionBar\">\n        <!-- Customize your theme here. -->\n        <item name=\"colorPrimary\">@color/colorPrimary</item>\n        <item name=\"colorPrimaryDark\">@color/colorPrimaryDark</item>\n        <item name=\"colorAccent\">@color/colorAccent</item>\n        <item name=\"android:background\">@android:color/transparent</item>\n    </style>\n\n    <item name=\"vs1\" type=\"id\" />\n    <item name=\"vs2\" type=\"id\" />\n\n    <dimen name=\"edge\">10dp</dimen>\n    <dimen name=\"normal\">14.5dp</dimen>\n    <dimen name=\"title_height\">48dp</dimen>\n    <dimen name=\"merchant_tab_height\">38dp</dimen>\n    <color name=\"divide_line\">#E5E5E5</color>\n\n    <dimen name=\"merchant_offset\">202dp</dimen>\n    <dimen name=\"merchant_side_width\">80dp</dimen>\n\n\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/strings.xml",
    "content": "<resources>\n    <string name=\"app_name\">behavior-learn</string>\n\n    <string name=\"view_behavior_merchant_page\">com.example.learn.business.MerchantPageBehavior</string>\n</resources>\n"
  },
  {
    "path": "build.gradle",
    "content": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\n\nbuildscript {\n\n    repositories {\n        google()\n        jcenter()\n    }\n    dependencies {\n        classpath 'com.android.tools.build:gradle:3.0.1'\n        classpath \"org.jetbrains.kotlin:kotlin-gradle-plugin:${KOTLIN_VERSION}\"\n    }\n}\n\nallprojects {\n    repositories {\n        google()\n        jcenter()\n        mavenCentral()\n        maven { url \"https://jitpack.io\" }\n        maven { url 'https://maven.google.com' }\n    }\n}\n\ntask clean(type: Delete) {\n    delete rootProject.buildDir\n}\n\next {\n    support_multidex = 'com.android.support:multidex:1.0.2'\n    support_support_v4 = \"com.android.support:support-v4:${ANDROID_SUPPORT_VERSION}\"\n    support_appcompat_v7 = \"com.android.support:appcompat-v7:${ANDROID_SUPPORT_VERSION}\"\n    support_recyclerview_v7 = \"com.android.support:recyclerview-v7:${ANDROID_SUPPORT_VERSION}\"\n    support_design = \"com.android.support:design:${ANDROID_SUPPORT_VERSION}\"\n    kotlin = \"org.jetbrains.kotlin:kotlin-stdlib:${KOTLIN_VERSION}\"\n    kotlin_stdlib = \"org.jetbrains.kotlin:kotlin-stdlib:${KOTLIN_VERSION}\"\n    kotlin_anko_common = \"org.jetbrains.anko:anko-common:${ANKO_VERSION}\"\n    glide = 'com.github.bumptech.glide:glide:4.6.1'\n    glide_compiler = 'com.github.bumptech.glide:compiler:4.6.1'\n    glide_transformations = 'jp.wasabeef:glide-transformations:3.0.1'\n    list_pull_to_refresh = 'in.srain.cube:ultra-ptr:1.0.11'\n    list_adapter = 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.40'\n    eventbus = 'org.greenrobot:eventbus:3.1.1'\n}"
  },
  {
    "path": "gradle/wrapper/gradle-wrapper.properties",
    "content": "#Wed May 30 14:37:50 CST 2018\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-4.1-all.zip\n"
  },
  {
    "path": "gradle.properties",
    "content": "# Project-wide Gradle settings.\n\n# IDE (e.g. Android Studio) users:\n# Gradle settings configured through the IDE *will override*\n# any settings specified in this file.\n\n# For more details on how to configure your build environment visit\n# http://www.gradle.org/docs/current/userguide/build_environment.html\n\n# Specifies the JVM arguments used for the daemon process.\n# The setting is particularly useful for tweaking memory settings.\norg.gradle.jvmargs=-Xmx1536m\n\n# When configured, Gradle will run in incubating parallel mode.\n# This option should only be used with decoupled projects. More details, visit\n# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n# org.gradle.parallel=true\n\nANDROID_SUPPORT_VERSION=27.0.2\nCOMPILE_SDK_VERSION=27\nTARGET_SDK_VERSION=27\nMIN_SDK_VERSION=16\nKOTLIN_VERSION=1.1.51\nANKO_VERSION=0.9\n\nAPPLICATION_ID=com.example.learn\nVERSION_CODE=1\nVERSION_NAME=1.0.0\nDEBUG=false\n\n"
  },
  {
    "path": "gradlew",
    "content": "#!/usr/bin/env bash\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS=\"\"\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn ( ) {\n    echo \"$*\"\n}\n\ndie ( ) {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\nesac\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin, switch paths to Windows format before running java\nif $cygwin ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=$((i+1))\n    done\n    case $i in\n        (0) set -- ;;\n        (1) set -- \"$args0\" ;;\n        (2) set -- \"$args0\" \"$args1\" ;;\n        (3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        (4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        (5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        (6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        (7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        (8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        (9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules\nfunction splitJvmOpts() {\n    JVM_OPTS=(\"$@\")\n}\neval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS\nJVM_OPTS[${#JVM_OPTS[*]}]=\"-Dorg.gradle.appname=$APP_BASE_NAME\"\n\nexec \"$JAVACMD\" \"${JVM_OPTS[@]}\" -classpath \"$CLASSPATH\" org.gradle.wrapper.GradleWrapperMain \"$@\"\n"
  },
  {
    "path": "gradlew.bat",
    "content": "@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto init\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto init\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:init\n@rem Get command-line arguments, handling Windowz variants\n\nif not \"%OS%\" == \"Windows_NT\" goto win9xME_args\nif \"%@eval[2+2]\" == \"4\" goto 4NT_args\n\n:win9xME_args\n@rem Slurp the command line arguments.\nset CMD_LINE_ARGS=\nset _SKIP=2\n\n:win9xME_args_slurp\nif \"x%~1\" == \"x\" goto execute\n\nset CMD_LINE_ARGS=%*\ngoto execute\n\n:4NT_args\n@rem Get arguments from the 4NT Shell from JP Software\nset CMD_LINE_ARGS=%$\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "settings.gradle",
    "content": "include ':app'\n"
  }
]