[
  {
    "path": ".gitignore",
    "content": "*.iml\n.gradle\n/local.properties\n/.idea/workspace.xml\n/.idea/libraries\n.DS_Store\n/build\n/captures\n"
  },
  {
    "path": "README.md",
    "content": "# UpMarqueeTextView-master\n仿淘宝首页的淘宝头条垂直滚动，因为循环滚动的是布局，所以很多向上的情况都可以用，可以先收藏起。    \n\n### 效果图  \n<img src=\"/screenshots/upmarqueeview.gif\" style=\"width: 30%;\">  \n\n### 淘宝效果图\n<img src=\"/screenshots/taobao1.gif\" style=\"width: 30%;\">  \n<img src=\"/screenshots/taobao2.gif\" style=\"width: 30%;\">  \n\n# Thanks  \nEveryone who has contributed code and reported issues and pull requests!  \n"
  },
  {
    "path": "UpMarqueeView/.gitignore",
    "content": "/build\n"
  },
  {
    "path": "UpMarqueeView/build.gradle",
    "content": "apply plugin: 'com.android.library'\n\nandroid {\n    compileSdkVersion 24\n    buildToolsVersion \"24.0.0\"\n\n    defaultConfig {\n        minSdkVersion 15\n        targetSdkVersion 24\n        versionCode 1\n        versionName \"1.0\"\n\n        testInstrumentationRunner \"android.support.test.runner.AndroidJUnitRunner\"\n    }\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'\n        }\n    }\n}\n\ndependencies {\n    compile fileTree(dir: 'libs', include: ['*.jar'])\n    compile 'com.android.support:appcompat-v7:24.1.0'\n    testCompile 'junit:junit:4.12'\n    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'\n    androidTestCompile 'com.android.support.test:runner:0.5'\n    androidTestCompile 'com.android.support:support-annotations:24.1.0'\n}\n"
  },
  {
    "path": "UpMarqueeView/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in F:\\mengweiData\\android-sdk-windows/tools/proguard/proguard-android.txt\n# You can edit the include path and order by changing the proguardFiles\n# directive in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# Add any project specific keep options here:\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"
  },
  {
    "path": "UpMarqueeView/src/androidTest/java/com/dreamlive/upmarqueeview/ExampleInstrumentationTest.java",
    "content": "package com.dreamlive.upmarqueeview;\n\nimport android.content.Context;\nimport android.support.test.InstrumentationRegistry;\nimport android.support.test.filters.MediumTest;\nimport android.support.test.runner.AndroidJUnit4;\n\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\n\n\nimport static org.junit.Assert.*;\n\n/**\n * Instrumentation test, which will execute on an Android device.\n *\n * @see <a href=\"http://d.android.com/tools/testing\">Testing documentation</a>\n */\n@MediumTest\n@RunWith(AndroidJUnit4.class)\npublic class ExampleInstrumentationTest {\n    @Test\n    public void useAppContext() throws Exception {\n        // Context of the app under test.\n        Context appContext = InstrumentationRegistry.getTargetContext();\n\n        assertEquals(\"com.dreamlive.upmarqueeView.test\", appContext.getPackageName());\n    }\n}"
  },
  {
    "path": "UpMarqueeView/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.dreamlive.upmarqueeview\">\n\n    <application android:allowBackup=\"true\" android:label=\"@string/app_name\"\n        android:supportsRtl=\"true\">\n\n    </application>\n\n</manifest>\n"
  },
  {
    "path": "UpMarqueeView/src/main/java/com/dreamlive/upmarqueeview/UPMarqueeView.java",
    "content": "package com.dreamlive.upmarqueeview;\n\nimport android.content.Context;\nimport android.util.AttributeSet;\nimport android.view.View;\nimport android.view.animation.Animation;\nimport android.view.animation.AnimationUtils;\nimport android.widget.ViewFlipper;\n\nimport java.util.List;\n\n/**\n * 仿淘宝首页的 淘宝头条滚动的自定义View\n *\n * Created by mengwei on 2016/7/20.\n */\npublic class UPMarqueeView extends ViewFlipper {\n\n    private Context mContext;\n    private boolean isSetAnimDuration = false;\n    private int interval = 2000;\n    /**\n     * 动画时间\n     */\n    private int animDuration = 500;\n\n    public UPMarqueeView(Context context, AttributeSet attrs) {\n        super(context, attrs);\n        init(context, attrs, 0);\n    }\n\n    private void init(Context context, AttributeSet attrs, int defStyleAttr) {\n        this.mContext = context;\n        setFlipInterval(interval);\n        Animation animIn = AnimationUtils.loadAnimation(mContext, R.anim.anim_marquee_in);\n        if (isSetAnimDuration) animIn.setDuration(animDuration);\n        setInAnimation(animIn);\n        Animation animOut = AnimationUtils.loadAnimation(mContext, R.anim.anim_marquee_out);\n        if (isSetAnimDuration) animOut.setDuration(animDuration);\n        setOutAnimation(animOut);\n    }\n\n\n    /**\n     * 设置循环滚动的View数组\n     *\n     * @param views\n     */\n    public void setViews(final List<View> views) {\n        if (views == null || views.size() == 0) return;\n        removeAllViews();\n        for ( int i = 0; i < views.size(); i++) {\n            final int position=i;\n            //设置监听回调\n            views.get(i).setOnClickListener(new OnClickListener() {\n                @Override\n                public void onClick(View v) {\n                    if (onItemClickListener != null) {\n                        onItemClickListener.onItemClick(position, views.get(position));\n                    }\n                }\n            });\n            ViewGroup viewGroup = (ViewGroup) views.get(i).getParent();\n            if (viewGroup != null) {\n                viewGroup.removeAllViews();\n            }\n            addView(views.get(i));\n        }\n        startFlipping();\n    }\n\n    /**\n     * 点击\n     */\n    private OnItemClickListener onItemClickListener;\n\n    /**\n     * 设置监听接口\n     * @param onItemClickListener\n     */\n    public void setOnItemClickListener(OnItemClickListener onItemClickListener) {\n        this.onItemClickListener = onItemClickListener;\n    }\n\n    /**\n     * item_view的接口\n     */\n    public interface OnItemClickListener {\n        void onItemClick(int position, View view);\n    }\n}\n"
  },
  {
    "path": "UpMarqueeView/src/main/res/anim/anim_marquee_in.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<set xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <translate\n        android:duration=\"300\"\n        android:fromYDelta=\"100%p\"\n        android:toYDelta=\"0\"/>\n    <alpha\n        android:duration=\"500\"\n        android:fromAlpha=\"0.0\"\n        android:toAlpha=\"1.0\"/>\n</set>"
  },
  {
    "path": "UpMarqueeView/src/main/res/anim/anim_marquee_out.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<set xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <translate\n        android:duration=\"400\"\n        android:fromYDelta=\"0\"\n        android:toYDelta=\"-100%p\"/>\n    <alpha\n        android:duration=\"500\"\n        android:fromAlpha=\"1.0\"\n        android:toAlpha=\"0.0\"/>\n</set>"
  },
  {
    "path": "UpMarqueeView/src/main/res/drawable/textview_border.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <solid android:color=\"#FFFFFFFF\" />\n    <stroke android:width=\"1dip\" android:color=\"@color/red\" />\n    <corners\n        android:radius=\"2dp\"\n       />\n</shape>"
  },
  {
    "path": "UpMarqueeView/src/main/res/layout/item_view.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:gravity=\"center\"\n    android:orientation=\"vertical\">\n\n    <RelativeLayout\n        android:id=\"@+id/rl\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\">\n\n        <TextView\n            android:id=\"@+id/title_tv1\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"热议\"\n            android:textSize=\"9sp\"\n            android:padding=\"3dp\"\n            android:background=\"@drawable/textview_border\"\n            android:layout_marginRight=\"6dp\"\n            android:textColor=\"@color/red\" />\n\n        <TextView\n            android:id=\"@+id/tv1\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_toRightOf=\"@+id/title_tv1\"\n            android:ellipsize=\"end\"\n            android:textSize=\"14sp\"\n            android:maxLines=\"1\" />\n    </RelativeLayout>\n\n    <RelativeLayout\n        android:id=\"@+id/rl2\"\n        android:layout_width=\"match_parent\"\n        android:layout_marginTop=\"5dp\"\n        android:layout_height=\"wrap_content\">\n\n        <TextView\n            android:id=\"@+id/title_tv2\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"热评\"\n            android:padding=\"3dp\"\n            android:textSize=\"9sp\"\n            android:background=\"@drawable/textview_border\"\n            android:layout_marginRight=\"6dp\"\n            android:textColor=\"@color/red\" />\n\n        <TextView\n            android:id=\"@+id/tv2\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_toRightOf=\"@+id/title_tv2\"\n            android:ellipsize=\"end\"\n            android:textSize=\"14sp\"\n            android:maxLines=\"1\" />\n    </RelativeLayout>\n\n</LinearLayout>\n"
  },
  {
    "path": "UpMarqueeView/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"red\">#be002f</color>\n</resources>\n"
  },
  {
    "path": "UpMarqueeView/src/main/res/values/strings.xml",
    "content": "<resources>\n    <string name=\"app_name\">UpMarqueeView</string>\n</resources>\n"
  },
  {
    "path": "UpMarqueeView/src/test/java/com/dreamlive/upmarqueeview/ExampleUnitTest.java",
    "content": "package com.dreamlive.upmarqueeview;\n\nimport org.junit.Test;\n\nimport static org.junit.Assert.*;\n\n/**\n * Example local unit test, which will execute on the development machine (host).\n *\n * @see <a href=\"http://d.android.com/tools/testing\">Testing documentation</a>\n */\npublic class ExampleUnitTest {\n    @Test\n    public void addition_isCorrect() throws Exception {\n        assertEquals(4, 2 + 2);\n    }\n}"
  },
  {
    "path": "app/.gitignore",
    "content": "/build\n"
  },
  {
    "path": "app/build.gradle",
    "content": "apply plugin: 'com.android.application'\n\nandroid {\n    compileSdkVersion 24\n    buildToolsVersion \"24.0.0\"\n    defaultConfig {\n        applicationId \"com.dreamlive.upmarqueeviewdemo\"\n        minSdkVersion 15\n        targetSdkVersion 24\n        versionCode 1\n        versionName \"1.0\"\n        testInstrumentationRunner \"android.support.test.runner.AndroidJUnitRunner\"\n    }\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'\n        }\n    }\n}\n\ndependencies {\n    compile fileTree(include: ['*.jar'], dir: 'libs')\n    compile 'com.android.support:appcompat-v7:24.1.0'\n    testCompile 'junit:junit:4.12'\n    compile project(':UpMarqueeView')\n}\n"
  },
  {
    "path": "app/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in F:\\mengweiData\\android-sdk-windows/tools/proguard/proguard-android.txt\n# You can edit the include path and order by changing the proguardFiles\n# directive in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# Add any project specific keep options here:\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"
  },
  {
    "path": "app/src/androidTest/java/com/dreamlive/upmarqueeviewdemo/ExampleInstrumentationTest.java",
    "content": "package com.dreamlive.upmarqueeviewdemo;\n\n\n\n\nimport android.content.Context;\nimport android.support.test.InstrumentationRegistry;\nimport android.support.test.filters.MediumTest;\nimport android.support.test.runner.AndroidJUnit4;\n\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\n\n\nimport static junit.framework.Assert.assertEquals;\nimport static org.junit.Assert.*;\n\n/**\n * Instrumentation test, which will execute on an Android device.\n *\n * @see <a href=\"http://d.android.com/tools/testing\">Testing documentation</a>\n */\n@MediumTest\n@RunWith(AndroidJUnit4.class)\npublic class ExampleInstrumentationTest {\n    @Test\n    public void useAppContext() throws Exception {\n        // Context of the app under test.\n        Context appContext = InstrumentationRegistry.getTargetContext();\n\n        assertEquals(\"com.dreamlive.upmarqueeView\", appContext.getPackageName());\n    }\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.dreamlive.upmarqueeviewdemo\" >\n\n    <application\n        android:allowBackup=\"true\"\n        android:icon=\"@mipmap/ic_launcher\"\n        android:label=\"@string/app_name\"\n        android:supportsRtl=\"true\"\n        android:theme=\"@style/AppTheme\" >\n        <activity android:name=\".MainActivity\" >\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/dreamlive/upmarqueeviewdemo/MainActivity.java",
    "content": "package com.dreamlive.upmarqueeviewdemo;\n\nimport android.os.Bundle;\nimport android.support.v7.app.AppCompatActivity;\nimport android.view.LayoutInflater;\nimport android.view.View;\nimport android.widget.LinearLayout;\nimport android.widget.TextView;\nimport android.widget.Toast;\n\nimport com.dreamlive.upmarqueeview.UPMarqueeView;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\n/**\n * 仿淘宝首页的 淘宝头条滚动的自定义View\n * Created by mengwei on 2016/7/20.\n */\npublic class MainActivity extends AppCompatActivity {\n\n\n    private UPMarqueeView upview1;\n    List<String> data = new ArrayList<>();\n    List<View> views = new ArrayList<>();\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        setContentView(R.layout.activity_main);\n        initParam();\n        initdata();\n        initView();\n    }\n\n    /**\n     * 实例化控件\n     */\n    private void initParam() {\n        upview1 = (UPMarqueeView) findViewById(R.id.upview1);\n    }\n\n    /**\n     * 初始化界面程序\n     */\n    private void initView() {\n        setView();\n        upview1.setViews(views);\n        /**\n         * 设置item_view的监听\n         */\n        upview1.setOnItemClickListener(new UPMarqueeView.OnItemClickListener() {\n            @Override\n            public void onItemClick(int position, View view) {\n                Toast.makeText(MainActivity.this, \"你点击了第几个items\" + position, Toast.LENGTH_SHORT).show();\n            }\n        });\n    }\n\n    /**\n     * 初始化需要循环的View\n     * 为了灵活的使用滚动的View，所以把滚动的内容让用户自定义\n     * 假如滚动的是三条或者一条，或者是其他，只需要把对应的布局，和这个方法稍微改改就可以了，\n     */\n    private void setView() {\n        for (int i = 0; i < data.size(); i = i + 2) {\n            final int position = i;\n            //设置滚动的单个布局\n            LinearLayout moreView = (LinearLayout) LayoutInflater.from(this).inflate(R.layout.item_view, null);\n            //初始化布局的控件\n            TextView tv1 = (TextView) moreView.findViewById(R.id.tv1);\n            TextView tv2 = (TextView) moreView.findViewById(R.id.tv2);\n\n            /**\n             * 设置监听\n             */\n            moreView.findViewById(R.id.rl).setOnClickListener(new View.OnClickListener() {\n                @Override\n                public void onClick(View view) {\n                    Toast.makeText(MainActivity.this, position + \"你点击了\" + data.get(position).toString(), Toast.LENGTH_SHORT).show();\n                }\n            });\n            /**\n             * 设置监听\n             */\n            moreView.findViewById(R.id.rl2).setOnClickListener(new View.OnClickListener() {\n                @Override\n                public void onClick(View view) {\n                    Toast.makeText(MainActivity.this, position + \"你点击了\" + data.get(position + 1).toString(), Toast.LENGTH_SHORT).show();\n                }\n            });\n            //进行对控件赋值\n            tv1.setText(data.get(i).toString());\n            if (data.size() > i + 1) {\n                //因为淘宝那儿是两条数据，但是当数据是奇数时就不需要赋值第二个，所以加了一个判断，还应该把第二个布局给隐藏掉\n                tv2.setText(data.get(i + 1).toString());\n            } else {\n                moreView.findViewById(R.id.rl2).setVisibility(View.GONE);\n            }\n\n            //添加到循环滚动数组里面去\n            views.add(moreView);\n        }\n    }\n\n    /**\n     * 初始化数据\n     */\n    private void initdata() {\n        data = new ArrayList<>();\n        data.add(\"家人给2岁孩子喝这个，孩子智力倒退10岁!!!\");\n        data.add(\"iPhone8最感人变化成真，必须买买买买!!!!\");\n        data.add(\"简直是白菜价！日本玩家33万甩卖15万张游戏王卡\");\n        data.add(\"iPhone7价格曝光了！看完感觉我的腰子有点疼...\");\n        data.add(\"主人内疚逃命时没带够，回废墟狂挖30小时！\");\n//        data.add(\"竟不是小米乐视！看水抢了骁龙821首发了！！！\");\n\n    }\n}\n"
  },
  {
    "path": "app/src/main/res/drawable/textview_border.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <solid android:color=\"#FFFFFFFF\" />\n    <stroke android:width=\"1dip\" android:color=\"@color/red\" />\n    <corners\n        android:radius=\"2dp\"\n       />\n</shape>"
  },
  {
    "path": "app/src/main/res/layout/activity_main.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:orientation=\"horizontal\">\n\n    <RelativeLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"80dp\">\n        <TextView\n            android:id=\"@+id/tbtv\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_margin=\"10dp\"\n            android:layout_centerVertical=\"true\"\n            android:textSize=\"22sp\"\n            android:textColor=\"@color/red\"\n            android:text=\"@string/taobao\" />\n\n        <com.dreamlive.upmarqueeview.UPMarqueeView\n            android:id=\"@+id/upview1\"\n            android:layout_marginLeft=\"20dp\"\n            android:layout_width=\"match_parent\"\n            android:layout_toRightOf=\"@+id/tbtv\"\n            android:layout_centerVertical=\"true\"\n            android:layout_marginTop=\"10dp\"\n            android:layout_height=\"match_parent\"></com.dreamlive.upmarqueeview.UPMarqueeView>\n    </RelativeLayout>\n</LinearLayout>\n"
  },
  {
    "path": "app/src/main/res/layout/item_view.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:gravity=\"center\"\n    android:orientation=\"vertical\">\n\n    <RelativeLayout\n        android:id=\"@+id/rl\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\">\n\n        <TextView\n            android:id=\"@+id/title_tv1\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"热议\"\n            android:textSize=\"9sp\"\n            android:padding=\"3dp\"\n            android:background=\"@drawable/textview_border\"\n            android:layout_marginRight=\"6dp\"\n            android:textColor=\"@color/red\" />\n\n        <TextView\n            android:id=\"@+id/tv1\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_toRightOf=\"@+id/title_tv1\"\n            android:ellipsize=\"end\"\n            android:textSize=\"14sp\"\n            android:maxLines=\"1\" />\n    </RelativeLayout>\n\n    <RelativeLayout\n        android:id=\"@+id/rl2\"\n        android:layout_width=\"match_parent\"\n        android:layout_marginTop=\"5dp\"\n        android:layout_height=\"wrap_content\">\n\n        <TextView\n            android:id=\"@+id/title_tv2\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"热评\"\n            android:padding=\"3dp\"\n            android:textSize=\"9sp\"\n            android:background=\"@drawable/textview_border\"\n            android:layout_marginRight=\"6dp\"\n            android:textColor=\"@color/red\" />\n\n        <TextView\n            android:id=\"@+id/tv2\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_toRightOf=\"@+id/title_tv2\"\n            android:ellipsize=\"end\"\n            android:textSize=\"14sp\"\n            android:maxLines=\"1\" />\n    </RelativeLayout>\n\n</LinearLayout>\n"
  },
  {
    "path": "app/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"colorPrimary\">#3F51B5</color>\n    <color name=\"colorPrimaryDark\">#303F9F</color>\n    <color name=\"colorAccent\">#FF4081</color>\n\n    <color name=\"white\">#FFFFFF</color>\n    <color name=\"black\">#000000</color>\n    <color name=\"red\">#be002f</color>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/dimens.xml",
    "content": "<resources>\n    <!-- Default screen margins, per the Android Design guidelines. -->\n    <dimen name=\"activity_horizontal_margin\">16dp</dimen>\n    <dimen name=\"activity_vertical_margin\">16dp</dimen>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/strings.xml",
    "content": "<resources>\n    <string name=\"app_name\">UpMarqueeTextView-master</string>\n\n    <string name=\"taobao\">淘宝\\n头条</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/styles.xml",
    "content": "<resources>\n\n    <!-- Base application theme. -->\n    <style name=\"AppTheme\" parent=\"Theme.AppCompat.Light.DarkActionBar\">\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    </style>\n\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values-w820dp/dimens.xml",
    "content": "<resources>\n    <!-- Example customization of dimensions originally defined in res/values/dimens.xml\n         (such as screen margins) for screens with more than 820dp of available width. This\n         would include 7\" and 10\" devices in landscape (~960dp and ~1280dp respectively). -->\n    <dimen name=\"activity_horizontal_margin\">64dp</dimen>\n</resources>\n"
  },
  {
    "path": "app/src/test/java/com/dreamlive/upmarqueeviewdemo/ExampleUnitTest.java",
    "content": "package com.dreamlive.upmarqueeviewdemo;\n\nimport org.junit.Test;\n\nimport static org.junit.Assert.*;\n\n/**\n * Example local unit test, which will execute on the development machine (host).\n *\n * @see <a href=\"http://d.android.com/tools/testing\">Testing documentation</a>\n */\npublic class ExampleUnitTest {\n    @Test\n    public void addition_isCorrect() throws Exception {\n        assertEquals(4, 2 + 2);\n    }\n}"
  },
  {
    "path": "build.gradle",
    "content": "// Top-level build file where you can add configuration options common to all sub-projects/modules.\n\nbuildscript {\n    repositories {\n        jcenter()\n    }\n    dependencies {\n        classpath 'com.android.tools.build:gradle:2.1.0'\n\n        // NOTE: Do not place your application dependencies here; they belong\n        // in the individual module build.gradle files\n    }\n}\n\nallprojects {\n    repositories {\n        jcenter()\n    }\n}\n\ntask clean(type: Delete) {\n    delete rootProject.buildDir\n}\n"
  },
  {
    "path": "gradle/wrapper/gradle-wrapper.properties",
    "content": "#Mon Dec 28 10:00:20 PST 2015\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-2.10-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"
  },
  {
    "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', ':UpMarqueeView'\n"
  }
]