Skip to content

view model

muune edited this page Feb 26, 2019 · 10 revisions

ChViewModel[목차]

ChStyleModel[목차]

ChViewModel(abstract class)

  • ChViewModel를 상속해서 VM클래스를 만든다.
  • style이 아닌 데이터를 바꾸는 것이 기본
  • style인 속성의 경우 @PROP var alpha = 1.0 이렇게 앞에 @PROP를 붙인다.
  • ChStyleModel은 반대로 기본이 style속성이며 object앞에 @STYLE이라는 에노테이션을 붙이고 style속성이 아닌 속성에 @EX val time0 = 700 이렇게 앞에 @EX를 붙인다.
//SigninVM
@VM
@SuppressLint("StaticFieldLeak")
object SigninVM:ChViewModel(){
    override fun start(){
        holder.start()
        mx.forEachIndexed { i, _ -> mx[i] = 100.0 }
        ma.forEachIndexed { i, _ -> mx[i] = 0.0 }
    }
    override fun end(){
        holder.end()
        mx.forEachIndexed { i, _ -> mx[i] = 0.0 }
        ma.forEachIndexed { i, _ -> mx[i] = 0.0 }
    }
    override fun paused(){
        holder.paused()
    }
    val mx = mutableListOf(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)
}
//SplashVM
@VM
object SplashVM:ChViewModel(){
    override fun start() {
        holder.start()
        title.start()
        alpha = 0.0
    }
    override fun end() {
        holder.end()
        title.end()
        alpha = 1.0
    }
    override fun resumeAnimation(it:ChItem){
        alpha = it.circleOut(0.0, 1.0)
    }
    val time = 500
    @PROP var alpha = 1.0

    val holder = Holder(0.0, 0.0, 1.0, 1.0)
    val title = Title
}

start() : ChViewModel

start()
  • View가 start될 때 데이터를 변경시키는 데 사용
override fun start() {
    holder.start()
    title.start()
    alpha = 0.0
}

end() : ChViewModel

end()
  • View가 end될 때 데이터를 변경시키는 데 사용
override fun end() {
    holder.end()
    title.end()
    alpha = 1.0
}

paused() : ChViewModel

paused()
  • View가 paused될 때 데이터를 변경시키는 데 사용
override fun paused(){
    holder.paused()
}

resumeAnimation() : ChViewModel

resumeAnimation(it: ChItem)
  • View가 resumeAnimation될 때 데이터를 변경시키는 데 사용
  • 매개변수가 ChItem으로 오기 때문에 easing처리를 할 수 있다.
  • 참고문서 - ChItem
override fun resumeAnimation(it: ChItem) {
    x = it.circleOut(Ch.window.width.toDouble(), 0.0)
    alpha = it.circleOut(0.5, 1.0)
}
override fun resumeAnimation(it:ChItem){
    alpha = it.circleOut(0.0, 1.0)
}

pauseAnimation() : ChViewModel

pauseAnimation(it: ChItem)
  • View가 pauseAnimation될 때 데이터를 변경시키는 데 사용
  • 매개변수가 ChItem으로 오기 때문에 easing처리를 할 수 있다.
  • 참고문서 - ChItem
override fun pauseAnimation(it: ChItem) {
    x = it.circleOut(0.0, -Ch.window.width.toDouble())
    alpha = it.circleOut(1.0, 0.5)
}

ChStyleModel(abstract class)

  • ChStyleModel를 상속해서 VM클래스를 만든다.
  • style인 속성 데이터(alpha, marginTop, scaleX ...)를 바꾸는 것이 기본
  • style속성이 아닌 속성에 @EX val time0 = 700 이렇게 앞에 @EX를 붙인다.
  • object앞에 @STYLE이라는 에노테이션을 붙이면 style이 아닌 속성을 쓰려고 할 때 에러가 난다.
//SplashVM
@STYLE object Title:ChStyleModel(){
    @EX val time0 = 700
    @EX val time1 = 300
    var alpha = 0.0
    var marginTop = 50.0.DptoPx
    var scaleX = 0.8
    var scaleY = 0.8
    override fun start(){
        alpha = 0.0
        marginTop = 50.0.DptoPx
        scaleX = 0.8
        scaleY = 0.8
    }
    override fun end(){
        alpha = 1.0
        marginTop = 0.0
        scaleX = 1.0
        scaleY = 1.0
    }
    override fun resumeAnimation(it:ChItem){
        alpha = it.circleOut(0.0, 1.0)
        marginTop = it.circleOut(50.0.DptoPx, 0.0)
        scaleX = it.circleOut(0.8, 1.0)
        scaleY = it.circleOut(0.8, 1.0)
    }
}
//SigninVM
@STYLE object Vali1:ChStyleModel(){
    val style = "valiError"
    var text = ""
}
//SigninVM
@STYLE object InputId:ChStyleModel(){
    @EX var userid = ""
    val style = "input"
    val marginStart:Double get() = SigninVM.mx[1]
    val alpha:Double get() = SigninVM.ma[1]
    val inputType = Ch.prop.text.type.text

    val maxLength = 30
    val focusChange = AppVM.inputFocus
    @SuppressLint("StaticFieldLeak")
    val textChanged = object: Ch.OnTextChanged(){
        override fun onChanged(view: EditText, s:CharSequence, start:Int, before:Int, count:Int){
            val v = "$s"
            if(v.isEmpty()) userid = ""
            else if(!Ch.ruleset.isOk("se.useridInput" to v)){
                if(Vali0.text == ""){
                    Vali0.text = Ch.i18n["signin.valiId"]
                    Signin.renderSync()
                }
                view.setText(userid)
                view.setSelection(userid.length)
                SigninVM.inputEffect(pos(), view, R.drawable.crop_fa635c)
            }else{
                userid = v
                if(before < count) {
                    if (Vali0.text != "") {
                        Vali0.text = ""
                        Signin.renderSync()
                    }
                    SigninVM.inputEffect(pos(), view, R.drawable.crop)
                }
            }
            SigninVM.isValid()
        }
    }
}
@STYLE class ModalHolder:ChStyleModel(){
    companion object {
        val popTime = Ch.time(320)
        val pushTime = Ch.time(350)
    }
    var visibility = View.VISIBLE
    var y = 0.0
    var alpha = 1.0
    override fun start(){
        y = Ch.window.height.toDouble()
        alpha = 0.0
        visibility = View.VISIBLE
    }
    override fun end(){
        y = 0.0
        alpha = 1.0
    }
    override fun paused(){
        start()
        visibility = View.GONE
    }
    override fun resumeAnimation(it: ChItem) {
        y = it.sineOut(Ch.window.height.toDouble(), 0.0)
        alpha = it.sineOut(0.0, 1.0)
    }
    override fun pauseAnimation(it: ChItem) {
        y = it.sineIn(0.0, Ch.window.height.toDouble())
        alpha = it.sineIn(1.0, 0.0)
    }
}

start() : ChStyleModel

start()
  • View가 start될 때 데이터를 변경시키는 데 사용
  • ChViewModel의 start 메서드와 동일함
override fun start(){
    alpha = 0.0
    marginTop = 50.0.DptoPx
    scaleX = 0.8
    scaleY = 0.8
}

end() : ChStyleModel

end()
  • View가 end될 때 데이터를 변경시키는 데 사용
  • ChViewModel의 end메서드와 동일함
override fun end(){
    alpha = 1.0
    marginTop = 0.0
    scaleX = 1.0
    scaleY = 1.0
}

paused() : ChStyleModel

paused()
  • View가 paused될 때 데이터를 변경시키는 데 사용
  • ChViewModel의 paused메서드와 동일함
override fun paused(){
    start()
    visibility = View.GONE
}

resumeAnimation() : ChStyleModel

resumeAnimation(it: ChItem)
  • View가 resumeAnimation될 때 데이터를 변경시키는 데 사용
  • 매개변수가 ChItem으로 오기 때문에 easing처리를 할 수 있다.
  • 참고문서 - ChItem
override fun resumeAnimation(it: ChItem) {
    y = it.sineOut(Ch.window.height.toDouble(), 0.0)
    alpha = it.sineOut(0.0, 1.0)
}

pauseAnimation() : ChStyleModel

pauseAnimation(it: ChItem)
  • View가 pauseAnimation될 때 데이터를 변경시키는 데 사용
  • 매개변수가 ChItem으로 오기 때문에 easing처리를 할 수 있다.
  • 참고문서 - ChItem
override fun pauseAnimation(it: ChItem) {
    y = it.sineIn(0.0, Ch.window.height.toDouble())
    alpha = it.sineIn(1.0, 0.0)
}
Clone this wiki locally