使用kotlin语言实现抽屉效果

          这几天在工作之余学习kotlin语言,刚好接触到了RecyclerView和DrawerLayout,作为一个Android开发的新手,肯定是想多学习一下相关的知识,就使用kotlin语言做了一个抽屉效果的布局,布局中的列表使用的是RecyclerView,希望能给码友们一些帮助;
package com.example.uworks.kotlinfordrag

import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import android.support.v7.widget.LinearLayoutManager
import android.support.v7.widget.RecyclerView
import java.util.*

class MainActivity : AppCompatActivity() {
    var recycle: RecyclerView? = null
    var recycle1: RecyclerView? = null
    var list = ArrayList<String>()
    var list1 = ArrayList<String>()
    var adapter: AdapterForR? = null
    var adapter1: AdapterForR1? = null
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        recycle = findViewById(R.id.id_recyclerview)as RecyclerView
        recycle1 = findViewById(R.id.id_recyclerview1) as RecyclerView
        recycle?.layoutManager = LinearLayoutManager(this)
        recycle1?.layoutManager =LinearLayoutManager(this)
        recycle?.addItemDecoration(Divider(this,LinearLayoutManager.HORIZONTAL))
        recycle1?.addItemDecoration(Divider(this,LinearLayoutManager.HORIZONTAL))
        initData()
    }
    private fun initData(){
        for (i in 0..10){
            list?.add("list:内容"+i)
            list1?.add("list1:内容"+i)
        }
         adapter = AdapterForR(this,list!!)
         adapter1 = AdapterForR1(this,list1!!)
        recycle?.adapter = adapter
        recycle1?.adapter = adapter1
    }
}

      在kotlin中?和!!还没有弄的很透彻,但是给我的感觉就是用比较多一些,可以看出来kotlin的语言比较直接些,也节省了代码量。

下面是RecyclerView的adapter,这个和我们之前的listview的Adapter有很大的区别

package com.example.uworks.kotlinfordrag

import android.content.Context
import android.support.v7.widget.RecyclerView
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import com.example.uworks.kotlinfordrag.AdapterForR.ViewHold

/**
 * Created by UWorks on 2016/8/19.
 */
class AdapterForR(internal var mContext: Context, internal var list: List<String>) : RecyclerView.Adapter<ViewHold>(){
    override fun getItemCount(): Int {
        return list.size
    }

    override fun onBindViewHolder(holder: ViewHold, position: Int) {
        holder.text.text=list.get(position)
    }

    override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHold {
        var holder = ViewHold(LayoutInflater.from(mContext).inflate(R.layout.layout_item,null))
        return holder
    }

    class ViewHold(itemView: View) : RecyclerView.ViewHolder(itemView) {
        var text:TextView
        init {
            text = itemView.findViewById(R.id.tv_item) as TextView
        }
    }
}
在recycleView中是没有divider这个属性的,我们需要手动添加,并且Google也没有为我们提供一些简单的模式,这需要我们自己通过继承

RecyclerView.ItemDecoration这个类
package com.example.uworks.kotlinfordrag

import android.content.Context
import android.graphics.Canvas
import android.graphics.Rect
import android.graphics.drawable.Drawable
import android.support.v7.widget.LinearLayoutManager
import android.support.v7.widget.RecyclerView
import android.util.Log
import android.view.View

/**
 * Created by UWorks on 2016/8/19.
 */
class Divider : RecyclerView.ItemDecoration {
    private val ATTRS = intArrayOf(android.R.attr.listDivider)


    private var mDivider: Drawable

    private var mOrientation: Int = 0

    constructor(context: Context, orientation: Int):super() {
        val a = context.obtainStyledAttributes(ATTRS)
        mDivider = a.getDrawable(0)
        a.recycle()
        setOrientation(orientation)
    }

    fun setOrientation(orientation: Int) {
        if (orientation != LinearLayoutManager.VERTICAL && orientation != LinearLayoutManager.HORIZONTAL) {
            throw IllegalArgumentException("invalid orientation")
        }
        mOrientation = orientation
    }

    override fun onDraw(c: Canvas, parent: RecyclerView) {
        Log.v("recyclerview - itemdecoration", "onDraw()")

        if (mOrientation == LinearLayoutManager.HORIZONTAL) {
            drawVertical(c, parent)
        } else {
            drawHorizontal(c, parent)
        }

    }


    fun drawVertical(c: Canvas, parent: RecyclerView) {
        val left = parent.paddingLeft
        val right = parent.width - parent.paddingRight

        val childCount = parent.childCount
        for (i in 0..childCount - 1) {
            val child = parent.getChildAt(i)
            val v = android.support.v7.widget.RecyclerView(parent.context)
            val params = child.layoutParams as RecyclerView.LayoutParams
            val top = child.bottom + params.bottomMargin
            val bottom = top + mDivider.getIntrinsicHeight()
            mDivider.setBounds(left, top, right, bottom)
            mDivider.draw(c)
        }
    }

    fun drawHorizontal(c: Canvas, parent: RecyclerView) {
        val top = parent.paddingTop
        val bottom = parent.height - parent.paddingBottom

        val childCount = parent.childCount
        for (i in 0..childCount - 1) {
            val child = parent.getChildAt(i)
            val params = child.layoutParams as RecyclerView.LayoutParams
            val left = child.right + params.rightMargin
            val right = left + mDivider.getIntrinsicHeight()
            mDivider.setBounds(left, top, right, bottom)
            mDivider.draw(c)
        }
    }

    override fun getItemOffsets(outRect: Rect, itemPosition: Int, parent: RecyclerView) {
        if (mOrientation == LinearLayoutManager.HORIZONTAL) {
            outRect.set(0, 0, 0, mDivider.getIntrinsicHeight())
        } else {
            outRect.set(0, 0, mDivider.getIntrinsicWidth(), 0)
        }
    }

}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值