


implementation 'io.alterac.blurkit:blurkit:1.1.0'
<io.alterac.blurkit.BlurLayout
android:id="@+id/blurLayout"
android:layout_width="0dp"
android:layout_height="270dp"
android:layout_marginEnd="20dp"
app:blk_blurRadius="20"
app:blk_cornerRadius="10dp"
app:blk_fps="1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/mHead">
</io.alterac.blurkit.BlurLayout>
override fun onStart() {
super.onStart()
//开始虚化
blurLayout.startBlur()
}
override fun onResume() {
super.onResume()
//暂停虚化
blurLayout.pauseBlur()
}
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="5dp"/>
<stroke android:color="#FFF " android:width="1dp"/>
</shape>
android:background="@drawable/edit_shape"
android:drawableStart="@drawable/iconfont_user"
android:paddingStart="10dp"
android:drawablePadding="10dp"
android:letterSpacing="0.1"
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false" android:drawable="@color/colorGrey"/>
<item android:state_enabled="true" android:drawable="@color/colorBlue"/>
</selector>
<resources>
<color name="colorPrimary">#6200EE</color>
<color name="colorPrimaryDark">#3700B3</color>
<color name="colorAccent">#03DAC5</color>
<color name="colorBlue">#4496EF</color>
<color name="colorGrey">#D6D7D7</color>
<color name="colorBlackGrey">#666</color>
<color name="colorWhite">#FFF</color>
</resources>
android:background="@drawable/loginbtn_state"
mName.addTextChangedListener(this)
mPassword.addTextChangedListener(this)
override fun afterTextChanged(s: Editable?) {
//当两个输入框都有内容才能点击
mLogin.isEnabled = mName.text.isNotEmpty() &&mPassword.text.isNotEmpty()
}
override fun onTouchEvent(event: MotionEvent?): Boolean {
if(event?.action==MotionEvent.ACTION_DOWN){
//隐藏键盘
hideKeyboard()
}
return super.onTouchEvent(event)
}
private fun hideKeyboard(){
//取消焦点
if(mName.hasFocus()){
mName.clearFocus()
}
if(mPassword.hasFocus()){
mPassword.clearFocus()
}
//获取管理输入的Manager
val inputMethodManager=
getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
inputMethodManager.hideSoftInputFromWindow(mPassword.windowToken,InputMethodManager.HIDE_NOT_ALWAYS)
}
class MainActivity : AppCompatActivity(),TextWatcher,View.OnFocusChangeListener {
}
override fun onFocusChange(v: View?, hasFocus: Boolean) {
if(v == mPassword){
if(hasFocus){
coverEye()
}else{
openEye()
}
}
}
mName.onFocusChangeListener = this
mPassword.onFocusChangeListener = this



val leftArmUpAnim:AnimatorSet by lazy {
val rotate= ObjectAnimator.ofFloat(mLeftArm,"rotation",140f).apply {
duration = 500
}
//手臂向右移动
val tx= PropertyValuesHolder.ofFloat("translationX",dpToPx(48f))
//手臂向上移动
val ty= PropertyValuesHolder.ofFloat("translationY",-dpToPx(40f))
val translate= ObjectAnimator.ofPropertyValuesHolder(mLeftArm,tx,ty)
AnimatorSet().apply {
playTogether(rotate,translate)
duration = 500
}
}
val leftArmDownAnim:AnimatorSet by lazy {
val rotate= ObjectAnimator.ofFloat(mLeftArm,"rotation",0f).apply {
duration = 500
}
//手臂向左移动
val tx= PropertyValuesHolder.ofFloat("translationX",0f)
//手臂向下移动
val ty= PropertyValuesHolder.ofFloat("translationY",0f)
val translate= ObjectAnimator.ofPropertyValuesHolder(mLeftArm,tx,ty)
AnimatorSet().apply {
playTogether(rotate,translate)
duration = 500
}
}
val rightArmDownAnim:AnimatorSet by lazy {
val rotate= ObjectAnimator.ofFloat(mRightArm,"rotation",0f).apply {
duration = 500
}
//手臂向右移动
val tx= PropertyValuesHolder.ofFloat("translationX",0f)
//手臂向下移动
val ty= PropertyValuesHolder.ofFloat("translationY",0f)
val translate= ObjectAnimator.ofPropertyValuesHolder(mRightArm,tx,ty)
AnimatorSet().apply {
playTogether(rotate,translate)
duration = 500
}
}
private fun coverEye(){
AnimatorSet().apply {
play(leftHandDownAnim)
.with(rightHandDownAnim)
.before(leftArmUpAnim)
.before(rightArmUpAnim)
start()
}
}
private fun openEye(){
AnimatorSet().apply {
play(leftArmDownAnim)
.with(rightArmDownAnim)
.before(leftHandUpAnim)
.before(rightHandUpAnim)
start()
}
}
private fun dpToPx(dp:Float):Float{
val display= DisplayMetrics()
windowManager.defaultDisplay.getMetrics(display)
return display.density*dp
}
val leftHandDownAnim:ObjectAnimator by lazy {
ObjectAnimator.ofFloat(mLeftHand,"translationY",mLeftHand.height*0.5f).apply {
duration = 500
}
}
val leftHandUpAnim:ObjectAnimator by lazy {
ObjectAnimator.ofFloat(mLeftHand,"translationY",0f).apply {
duration = 500
}
}
val rightHandDownAnim:ObjectAnimator by lazy {
ObjectAnimator.ofFloat(mRighrHand,"translationY",mRighrHand.height*0.5f).apply {
duration = 500
}
}
val rightHandUpAnim:ObjectAnimator by lazy {
ObjectAnimator.ofFloat(mRighrHand,"translationY",0f).apply {
duration = 500
}
}