-
Notifications
You must be signed in to change notification settings - Fork 1
view model
muune edited this page Feb 26, 2019
·
10 revisions
- 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()
- View가 start될 때 데이터를 변경시키는 데 사용
override fun start() {
holder.start()
title.start()
alpha = 0.0
}
end()
- View가 end될 때 데이터를 변경시키는 데 사용
override fun end() {
holder.end()
title.end()
alpha = 1.0
}
paused()
- View가 paused될 때 데이터를 변경시키는 데 사용
override fun paused(){
holder.paused()
}
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(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를 상속해서 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()
- View가 start될 때 데이터를 변경시키는 데 사용
- ChViewModel의 start 메서드와 동일함
override fun start(){
alpha = 0.0
marginTop = 50.0.DptoPx
scaleX = 0.8
scaleY = 0.8
}
end()
- View가 end될 때 데이터를 변경시키는 데 사용
- ChViewModel의 end메서드와 동일함
override fun end(){
alpha = 1.0
marginTop = 0.0
scaleX = 1.0
scaleY = 1.0
}
paused()
- View가 paused될 때 데이터를 변경시키는 데 사용
- ChViewModel의 paused메서드와 동일함
override fun paused(){
start()
visibility = View.GONE
}
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(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)
}