栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【Android】时间轴

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Android】时间轴

【Android】时间轴
  • 前言
  • 一、主要思路
  • 二、代码展示
    • 1.RecyclerView适配器
    • 2.MainActicity
    • 3.布局文件
      • 1)account_item.xml
      • 2) activity_main.xml
  • 总结


前言

提示:代码为Kotlin语言

在写记账本项目的时候,需要完成一个时间轴的效果,在此做下记录。


一、主要思路

主要的思路就是一个RecyclerView的应用,把RecyclerView的item分成左右两部分,左边用来显示收入的内容,右部用来显示支出的内容。
效果如下图:

二、代码展示 1.RecyclerView适配器

代码如下:

package com.example.timer_shaft_bill

import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import de.hdodenhof.circleimageview.CircleImageView

class Account(val type:String, val price:String, val remark:String, val payType:Int)
class AccountAdapter(private val accountLists:ArrayList):RecyclerView.Adapter() {
    inner class IncomeViewHolder(view: View): RecyclerView.ViewHolder(view){
        val type:TextView = view.findViewById(R.id.income_type)
        val num:TextView = view.findViewById(R.id.income_num)
        val remark:TextView = view.findViewById(R.id.income_remark)
        val icon:CircleImageView = view.findViewById(R.id.type_icon)
    }
    inner class ExpendViewHolder(view: View) : RecyclerView.ViewHolder(view) {
        val type:TextView = view.findViewById(R.id.expend_type)
        val price:TextView = view.findViewById(R.id.expend_price)
        val remark:TextView = view.findViewById(R.id.expend_remark)
        val icon:CircleImageView = view.findViewById(R.id.type_icon)
    }

    override fun getItemViewType(position: Int): Int {
        val account = accountLists[position]
        return account.payType
    }
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
        return if (viewType == 1){
            val view =
                LayoutInflater.from(parent.context).inflate(R.layout.account_item, parent, false)
            IncomeViewHolder(view)
        }else{
            val view =
                LayoutInflater.from(parent.context).inflate(R.layout.account_item, parent, false)
            ExpendViewHolder(view)
        }
    }

    override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
        val account = accountLists[position]
        when (holder) {
            is ExpendViewHolder -> {
                holder.type.text = account.type
                holder.price.text = account.price
                holder.remark.text = account.remark
                holder.icon.bringToFront()
            }
            is IncomeViewHolder -> {
                holder.type.text = account.type
                holder.num.text = account.price
                holder.remark.text = account.remark
                holder.icon.bringToFront()
            }
            else -> throw IllegalArgumentException()
        }
    }
    override fun getItemCount() = accountLists.size

    fun updateAccounts(lists:ArrayList){
        accountLists.clear()
        accountLists.addAll(lists)
        notifyDataSetChanged()
    }
}
2.MainActicity

代码如下:

package com.example.timer_shaft_bill

import android.graphics.Color
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import de.hdodenhof.circleimageview.CircleImageView

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        window.statusBarColor = Color.TRANSPARENT // 设置状态栏颜色为透明
        initView()
    }
    private fun initView(){
        val accountLists = ArrayList()
        repeat(3){
            accountLists.add(Account("饮食","12","午饭",0))
            accountLists.add(Account("饮食","11","晚饭",0))
            accountLists.add(Account("兼职","50","家教",1))
        }

        // 获取layoutManager
        val layoutManager = LinearLayoutManager(this)
        val recyclerview = findViewById(R.id.recyclerview)
        recyclerview.layoutManager = layoutManager
        // 获取适配器
        val adapter = AccountAdapter(accountLists)
        recyclerview.adapter = adapter

        // 显示在最上层
        val addAccount = findViewById(R.id.add_account)
        addAccount.bringToFront()
    }
}
3.布局文件 1)account_item.xml



    

    

    
        
            
            
        
        
    

    
        
            
            
        
        
    

2) activity_main.xml



    

        
    

    

        
            
            
        

        

        

            

            

            
        

        
            
                
                
            

            
            
                
                
            
        

        

        
    


注意:CoordinatorLayout和CollapsingToolbarLayout是为了图片延伸到状态栏。


总结

总的来说,就是RecyclerView设置不同的View Holder:收入与支出,然后根据ViewHolder的类型放置到左边或右边。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1024869.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号