{"id":604,"date":"2020-07-02T10:54:52","date_gmt":"2020-07-02T02:54:52","guid":{"rendered":"https:\/\/badgameshow.com\/fly\/?p=604"},"modified":"2020-07-02T10:55:13","modified_gmt":"2020-07-02T02:55:13","slug":"android-viewpager-indicator-%e5%ba%95%e9%83%a8%e5%8e%9f%e9%bb%9e","status":"publish","type":"post","link":"https:\/\/badgameshow.com\/fly\/android-viewpager-indicator-%e5%ba%95%e9%83%a8%e5%8e%9f%e9%bb%9e\/","title":{"rendered":"Android ViewPager indicator (\u5e95\u90e8\u539f\u9ede)"},"content":{"rendered":"<h4>1.\u5e03\u5c40<\/h4>\n<pre><code class=\"language-XML line-numbers\"> &lt;androidx.viewpager.widget.ViewPager\n     android:id=\"@+id\/viewPager\"\n     android:layout_width=\"409dp\"\n     android:layout_height=\"729dp\"\n     app:layout_constraintBottom_toBottomOf=\"parent\"\n     app:layout_constraintEnd_toEndOf=\"parent\"\n     app:layout_constraintStart_toStartOf=\"parent\"\n     app:layout_constraintTop_toTopOf=\"parent\"&gt;\n\n&lt;\/androidx.viewpager.widget.ViewPager&gt;\n\n&lt;androidx.constraintlayout.widget.Guideline\n     android:id=\"@+id\/guideline\"\n     android:layout_width=\"wrap_content\"\n     android:layout_height=\"wrap_content\"\n     android:orientation=\"horizontal\"\n     app:layout_constraintGuide_percent=\"0.9\" \/&gt;\n\n&lt;LinearLayout\n     android:id=\"@+id\/guide\"\n     android:layout_width=\"wrap_content\"\n     android:layout_height=\"wrap_content\"\n     android:orientation=\"horizontal\"\n     app:layout_constraintBottom_toBottomOf=\"parent\"\n     app:layout_constraintEnd_toEndOf=\"parent\"\n     app:layout_constraintStart_toStartOf=\"parent\"\n     app:layout_constraintTop_toTopOf=\"@+id\/guideline\" \/&gt;\n<\/code><\/pre>\n<h4>2.\u628a\u5716\u7247\u653e\u9032string.xml<\/h4>\n<pre><code class=\"language-XML line-numbers\">&lt;array name=\"guideImages\"&gt;\n     &lt;item&gt;@drawable\/bg1&lt;\/item&gt;\n     &lt;item&gt;@drawable\/bg2&lt;\/item&gt;\n     &lt;item&gt;@drawable\/bg3&lt;\/item&gt;\n&lt;\/array&gt;\n<\/code><\/pre>\n<h4>3.\u81ea\u5b9a\u7fa9\u9078\u64c7\u5716\u7247&amp;\u672a\u9078\u64c7\u5716\u7247<\/h4>\n<p>no_select.xml<\/p>\n<pre><code class=\"language-XML line-numbers\">&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\n&lt;shape android:shape=\"oval\" xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"&gt;\n    &lt;solid android:color=\"#DCDCDC\"\/&gt;\n&lt;\/shape&gt;\n<\/code><\/pre>\n<p>yes_select.xml<\/p>\n<pre><code class=\"language-XML line-numbers\">&lt;?xml version=\"1.0\" encoding=\"utf-8\"?&gt;\n&lt;shape android:shape=\"rectangle\" xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"&gt;\n    &lt;solid android:color=\"#61BEB4\"\/&gt;\n    &lt;corners android:radius=\"20dp\"\/&gt;\n&lt;\/shape&gt;\n<\/code><\/pre>\n<h4>4.\u81ea\u5b9a\u7fa9PageAdapter<\/h4>\n<pre><code class=\"language-Kotlin line-numbers\">import android.view.View\nimport android.view.ViewGroup\nimport androidx.viewpager.widget.PagerAdapter\n\nclass MyViewPageAdapter(private val view: ArrayList&lt;View&gt;) : PagerAdapter() {\n\n\n    override fun destroyItem(container: ViewGroup, position: Int, arg2: Any) {\n        container.removeView(view[position])\n    }\n\n    override fun instantiateItem(container: ViewGroup, position: Int): Any {\n        container.addView(view[position])\n        return view[position]\n    }\n\n    override fun isViewFromObject(arg0: View, arg1: Any) = arg0 == arg1\n\n    override fun getCount() = view.size\n}\n<\/code><\/pre>\n<h4>5.\u5be6\u4f5c<\/h4>\n<pre><code class=\"language-Kotlin line-numbers\">import android.annotation.SuppressLint\nimport android.content.res.TypedArray\nimport android.os.Bundle\nimport android.view.View\nimport android.view.ViewGroup\nimport android.view.WindowManager\nimport android.widget.ImageView\nimport androidx.appcompat.app.AppCompatActivity\nimport androidx.viewpager.widget.ViewPager\nimport kotlinx.android.synthetic.main.activity_main.*\n\n\nclass MainActivity : AppCompatActivity(), ViewPager.OnPageChangeListener {\n\n    lateinit var pictures: TypedArray \/\/\u53d6\u5f97\u5716\u7247\n    lateinit var views: ArrayList&lt;View&gt; \/\/\u5b58\u653e\u5716\u7247\n    lateinit var mAdapter : MyViewPageAdapter\n    lateinit var points: ArrayList&lt;ImageView&gt; \/\/\u6307\u793a\u5668\u5716\u7247\n    val GUIDE_COUNT = 3\n\n    @SuppressLint(\"Recycle\")\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        setContentView(R.layout.activity_main)\n\n        \/\/\u5168\u87a2\u5e55\n        window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN)\n        pictures = resources.obtainTypedArray(R.array.guideImages)\n\n        initView()\n        initData()\n\n    }\n\n    private fun initView() {\n        views = arrayListOf()\n        points = arrayListOf()\n        mAdapter = MyViewPageAdapter(views)\n    }\n\n    private fun initData() {\n        val mParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)\n\n        \/\/\u6dfb\u52a0\u5716\u7247\n        for (i in 0 until GUIDE_COUNT) {\n            val imageView = ImageView(this)\n            imageView.layoutParams = mParams\n            imageView.scaleType = ImageView.ScaleType.CENTER_CROP\n            imageView.setImageDrawable(pictures.getDrawable(i))\n            views.add(imageView)\n        }\n\n        viewPager.adapter = mAdapter\n        viewPager.addOnPageChangeListener(this)\n        initPoints()\n\n    }\n\n    private fun initPoints() {\n        for (i in 0 until GUIDE_COUNT) {\n            val point = ImageView(this)\n            point.setPadding(10,10,10,10)\n            point.scaleType = ImageView.ScaleType.FIT_XY\n\n            if (i == 0) {\n                point.setImageResource(R.drawable.yes_select)\n                point.layoutParams = ViewGroup.LayoutParams(96,36)\n            } else {\n                point.setImageResource(R.drawable.no_select)\n                point.layoutParams = ViewGroup.LayoutParams(36,36)\n            }\n\n            guide.addView(point)\n            points.add(point)\n        }\n    }\n\n\n    override fun onPageScrollStateChanged(state: Int) {\n    }\n\n    override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {\n    }\n\n    override fun onPageSelected(position: Int) {\n\n        for (i in 0 until points.size) {\n            val params = points[position].layoutParams\n            params.width = 96\n            params.height = 36\n            points[position].layoutParams = params\n            points[position].setImageResource(R.drawable.yes_select)\n\n            if (position != i) {\n                val params1 = points[i].layoutParams\n                params1.width = 36\n                params1.height = 36\n                points[i].layoutParams = params1\n                points[i].setImageResource(R.drawable.no_select)\n\n            }\n        }\n    }\n}\n<\/code><\/pre>\n<h4>6.\u6548\u679c\u5c55\u793a<\/h4>\n<p><img decoding=\"async\" src=\"https:\/\/badgameshow.com\/fly\/wp-content\/uploads\/2020\/07\/ViewPager-indicator.gif\" alt=\"\" \/><\/p>\n\n<div style=\"font-size: 0px; height: 0px; line-height: 0px; margin: 0; padding: 0; clear: both;\"><\/div>","protected":false},"excerpt":{"rendered":"<p>1.\u5e03\u5c40 &lt;androidx.viewpager.widget.ViewPager android:id &hellip; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"pgc_sgb_lightbox_settings":"","footnotes":""},"categories":[5],"tags":[13,94,15],"class_list":["post-604","post","type-post","status-publish","format-standard","hentry","category-android","tag-android","tag-indicator","tag-kotlin"],"_links":{"self":[{"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/posts\/604","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/comments?post=604"}],"version-history":[{"count":2,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/posts\/604\/revisions"}],"predecessor-version":[{"id":607,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/posts\/604\/revisions\/607"}],"wp:attachment":[{"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/media?parent=604"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/categories?post=604"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/badgameshow.com\/fly\/wp-json\/wp\/v2\/tags?post=604"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}