kotlin-andorid dashboard儀表盤(pán)頁(yè)面

WechatIMG1.jpeg
WechatIMG2.png
WechatIMG3.png

先上代碼了

// 枚舉圖表種類(lèi)
enum class ChartItemtag(var index:Int){
    GoalCompletion(0),
    SalesFunnels(1),
    RecentBusiness(2)
}
class DashBoardFragment : StructFragment() {
    companion object{
        val pageIds = PageId(10001,10002,10003)
    }
    data class PageId(var containerId:Int,var iconId:Int,var labelId:Int)
    data class ItemChart(var title:String,var containerTag:Int,var iconcode:String,var iconcolor:String,var label:String)

    val datasource:List<ItemChart>? by lazy {
        listOf<ItemChart>(
                ItemChart("銷(xiāo)售情況",ChartItemtag.GoalCompletion.index,"\ue60d","#a1e3a1","銷(xiāo)售目標(biāo)完成情況"),
                ItemChart("銷(xiāo)售漏斗",ChartItemtag.SalesFunnels.index,"\ue619","#f08980","銷(xiāo)售漏斗"),
                ItemChart("近期商機(jī)",ChartItemtag.RecentBusiness.index,"\ue612","#a2b4fe","近期重點(diǎn)商機(jī)")
        )
    }

    var arrowv:View?=null

    val selectedList = listOf<String>(
            "全部?jī)x表盤(pán)","績(jī)效儀表盤(pán)","行為儀表盤(pán)","客戶(hù)分析"
    )
    val selectedview:SelectedListView? by lazy {
        val view = SelectedListView(context)
        view.layoutParams = LinearLayout.LayoutParams(matchParent, matchParent)
        view.list?.adapter = SelectedAdapter(selectedList)
        view.together = arrowv
        view
    }


    val alldashboard:RecyclerView? by lazy {
        val recycler = RecyclerView(context)
        val lpm = LinearLayoutManager(context)
            lpm.orientation = LinearLayoutManager.VERTICAL
        recycler.layoutManager = lpm
        recycler.layoutParams = ViewGroup.LayoutParams(matchParent, matchParent)
        recycler
    }

    override fun initProperties() {
        super.initProperties()
        title = "全部?jī)x表盤(pán)"
    }

    override fun initView(inflater: LayoutInflater, container: ViewGroup, savedInstanceState: Bundle?) {
        super.initView(inflater, container, savedInstanceState)
        val container_ = LinearLayout(context)
        container_.orientation = LinearLayout.VERTICAL
        fragment_view = container_
    }

    override fun initUIChildView() {
        super.initUIChildView()

        val toolbarSearchId = 20003

        toolbar = DeToolbar(context)
        toolbar.title_view?.removeView(toolbar.title_tv)
        toolbar.title_view?.addView(
                context.linearLayout{
                    orientation = LinearLayout.HORIZONTAL
                    gravity = Gravity.CENTER
                    textView {
                        textSize = 20f
                        textColor = Color.WHITE
                        text = title
                    }.lparams { rightMargin = dip(3) }
                    textView {
                        id = toolbarSearchId
                        typeface = App.instance?.iconfont
                        textSize = 20f
                        textColor = Color.WHITE
                        text = "\ue60c"
                    }
                }
        )
        arrowv = toolbar.title_view?.find(toolbarSearchId)
        (fragment_view as LinearLayout).addView(toolbar)



        val framelayout = FrameLayout(context)
            framelayout.layoutParams = FrameLayout.LayoutParams(matchParent, matchParent)
            framelayout.addView(alldashboard)
            framelayout.addView(selectedview)
        (fragment_view as LinearLayout).addView(framelayout)

        alldashboard?.adapter = DashMenuAdapter(context,datasource!!);
    }

    override fun settingsDelegate() {
        toolbar.title_view?.onClick {v->
            selectedview?.toggle()
        }
    }


    inner class SelectedAdapter(var datasource_: List<String>?) : RecyclerView.Adapter<SelectedAdapter.ViewHolder>() {

        val tvId = 100001

        override fun getItemCount(): Int  = datasource_!!.size

        override fun onBindViewHolder(holder: ViewHolder?, position: Int) {
            val obj = datasource_!![position]
            with(holder!!){
                tv?.text = obj
            }
        }

        override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder {
            val layout  = context.linearLayout {
                            gravity = Gravity.CENTER
                            background = resources.getDrawable(R.drawable.itempressed_draw)
                            textView {
                                padding = dip(15)
                                id = tvId
                                textSize = 16f
                                textColor = Color.BLACK
                                gravity = Gravity.CENTER
                            }.lparams{width = matchParent}
                        }
            layout.layoutParams = LinearLayout.LayoutParams(matchParent, wrapContent)
             parent?.addView(layout)
            return ViewHolder(layout)
        }

        inner class ViewHolder(itemView: View?) : RecyclerView.ViewHolder(itemView) {
            var tv: TextView? = itemView?.find(tvId)
        }
    }
}

ChartItemtag是圖表的枚舉種類(lèi)
DashBoardFragment是列表頁(yè),StructFragment是自己封裝的一個(gè)關(guān)于Fragment的生命周期的簡(jiǎn)單組件棉姐,
圖表的具體展示是采用android的webview組合echart圖表(為了配合ios的圖表屠列,這樣省時(shí)省力)

DashWebViewFragment 是webview展示圖表的Fragment

open abstract class DashWebViewFragment :StructFragment() {
    data class PageId(
            var toolbar_leftId:Int,var toobar_titleId:Int,
            var toolbar_rightId:Int,var refreshId:Int,var webviewId:Int)
    val pageids = PageId(R.id.left_tv, R.id.title_tv, R.id.right_tv,10001,10002);

    val progressDialog:ProgressDialog? by lazy {
        val progress = ProgressDialog(context)
            progress.setMessage("頁(yè)面加載中,請(qǐng)稍后")
            progress.setCancelable(true)
            progress
    }

    val chart: WebView? by lazy {
        val webView = fragment_view.find<WebView>(pageids.webviewId)
        val settings = webView.settings
        //設(shè)置webview
        settings.setDefaultTextEncodingName("utf-8")
        settings.setJavaScriptEnabled(true)

        settings.setDisplayZoomControls(false)
        settings.setSupportZoom(true)
        settings.setBuiltInZoomControls(true)

        settings.setUseWideViewPort(true)

        settings.setLoadWithOverviewMode(true)

        settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN)

        settings.setBlockNetworkImage(false)
        settings.setLoadsImagesAutomatically(true)

        webView.setWebViewClient(object :WebViewClient(){
            override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
                super.onPageStarted(view, url, favicon)
                progressDialog?.show()
            }
        })

        webView.setWebChromeClient(object : WebChromeClient() {
            override fun onProgressChanged(view: WebView, newProgress: Int) {
                super.onProgressChanged(view, newProgress)
                if (newProgress >= 100) {
                    progressDialog?.dismiss()
                    calljsfunction()
                }
            }

        })
        webView.addJavascriptInterface(object : Any() {
                @JavascriptInterface
                fun alert(message:String) {
                    context.toast(message)
                }
        }, "baseObj")

        webView
    }

    val refreshview:SwipeRefreshLayout? by lazy {
        val refresh = fragment_view.find<SwipeRefreshLayout>(pageids.refreshId)
        refresh
    }

    override fun initView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?) {
        super.initView(inflater, container, savedInstanceState)
        fragment_view = context.verticalLayout {
            weightSum = 5f
            backgroundColor = resources.getColor(R.color.defaultgray)
            include<View>(R.layout.toolbar)
            swipeRefreshLayout {
                id = pageids.refreshId
                webView {
                    id = pageids.webviewId
                }.lparams { width = matchParent;height = matchParent; }
            }.lparams { width = matchParent;height = matchParent;}

        }
        fragment_view.layoutParams = ViewGroup.LayoutParams(matchParent, matchParent)
    }

    override fun initUIChildView() {
        super.initUIChildView()
        with(fragment_view) {
            find<TextView>(R.id.title_tv)?.text = title
            find<TextView>(R.id.left_tv)?.onClick {
                activity.finish()
            }
        }
    }

    override fun settingsDelegate() {
        super.settingsDelegate()
        refreshview?.setOnRefreshListener{
            chart?.reload()
            refreshview?.isRefreshing = false
        }
    }

    override fun onResume() {
        chart?.onResume()
        chart?.reload()
        super.onResume()

    }

    override fun onPause() {
        super.onPause()
        chart?.onPause()
    }

    override fun onDestroy() {
        if (chart != null) {
            chart?.destroy();
        }
        super.onDestroy()
    }

    abstract fun calljsfunction()
}

其他的比較容易理解,就不多說(shuō)了

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末伞矩,一起剝皮案震驚了整個(gè)濱河市笛洛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌扭吁,老刑警劉巖撞蜂,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盲镶,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡蝌诡,警方通過(guò)查閱死者的電腦和手機(jī)溉贿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)浦旱,“玉大人宇色,你說(shuō)我怎么就攤上這事“浜” “怎么了宣蠕?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)甥捺。 經(jīng)常有香客問(wèn)我抢蚀,道長(zhǎng),這世上最難降的妖魔是什么镰禾? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任皿曲,我火速辦了婚禮,結(jié)果婚禮上吴侦,老公的妹妹穿的比我還像新娘屋休。我一直安慰自己,他們只是感情好备韧,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布劫樟。 她就那樣靜靜地躺著,像睡著了一般织堂。 火紅的嫁衣襯著肌膚如雪叠艳。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,146評(píng)論 1 297
  • 那天捧挺,我揣著相機(jī)與錄音虑绵,去河邊找鬼尿瞭。 笑死闽烙,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的声搁。 我是一名探鬼主播黑竞,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼疏旨!你這毒婦竟也來(lái)了很魂?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤檐涝,失蹤者是張志新(化名)和其女友劉穎遏匆,沒(méi)想到半個(gè)月后法挨,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡幅聘,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年凡纳,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片帝蒿。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡荐糜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出葛超,到底是詐尸還是另有隱情暴氏,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布绣张,位于F島的核電站答渔,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏侥涵。R本人自食惡果不足惜研儒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望独令。 院中可真熱鬧端朵,春花似錦、人聲如沸燃箭。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)招狸。三九已至敬拓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間裙戏,已是汗流浹背乘凸。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留累榜,地道東北人营勤。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像壹罚,于是被迫代替她去往敵國(guó)和親葛作。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容