Day5带补间动画的登录界面

image.png

image.png

1.导入素材

image.png

2.配值xml文件

1.Activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
   <!--背景图片-->
   <ImageView
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:src="@drawable/bg"
       android:scaleType="fitXY"/>

   <!--添加虚化层-->
   <io.alterac.blurkit.BlurLayout
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       app:blk_fps="0"
       app:blk_blurRadius="25"/>

   <!--猫头鹰-->
   <RelativeLayout
       android:layout_width="300dp"
       android:layout_height="200dp"
       android:layout_centerHorizontal="true"
       android:layout_alignTop="@id/bg"
       android:layout_marginTop="-50dp"
       >

      <!--头像-->
      <ImageView
          android:id="@+id/iv_head"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:src="@drawable/owl_head"
          android:layout_centerHorizontal="true"/>

      <!--手掌-->
      <ImageView
          android:id="@+id/iv_left_hand"
          android:layout_width="50dp"
          android:layout_height="60dp"
          android:src="@drawable/icon_hand"
          android:layout_alignParentLeft="true"
          android:layout_alignBottom="@id/iv_head"
          android:layout_marginBottom="-20dp"
          android:layout_marginLeft="10dp"/>

      <ImageView
          android:id="@+id/iv_right_hand"
          android:layout_width="50dp"
          android:layout_height="60dp"
          android:src="@drawable/icon_hand"
          android:layout_alignParentRight="true"
          android:layout_alignBottom="@id/iv_head"
          android:layout_marginBottom="-20dp"
          android:layout_marginRight="10dp"/>

      <!--翅膀-->
      <ImageView
          android:id="@+id/iv_left_arm"
          android:layout_width="65dp"
          android:layout_height="40dp"
          android:src="@drawable/arm_left"
          android:layout_below="@id/iv_head"
          android:layout_alignParentLeft="true"
          android:layout_marginLeft="20dp"/>

      <ImageView
          android:id="@+id/iv_right_arm"
          android:layout_width="65dp"
          android:layout_height="40dp"
          android:src="@drawable/arm_right"
          android:layout_below="@id/iv_head"
          android:layout_alignParentRight="true"
          android:layout_marginRight="20dp"/>
   </RelativeLayout>

   <!--输入框背景-->
   <io.alterac.blurkit.BlurLayout
       android:id="@+id/bg"
       android:layout_width="match_parent"
       android:layout_height="300dp"
       android:background="@drawable/input_bg_shape"
       android:layout_centerInParent="true"
       android:layout_marginLeft="20dp"
       android:layout_marginRight="20dp"
       app:blk_fps="0"
       app:blk_blurRadius="20"/>


   <!--添加标题和输入框视图-->
   <LinearLayout
       android:layout_width="match_parent"
       android:layout_height="300dp"
       android:layout_centerInParent="true"
       android:orientation="vertical"
       android:padding="20dp"
       android:layout_marginRight="20dp"
       android:layout_marginLeft="20dp">

      <!--标题-->
      <TextView
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:text="炫酷登录"
          android:textColor="#999999"
          android:textSize="20dp"
          android:textAlignment="center"/>

      <!--添加输入框-->
      <EditText
          android:id="@+id/et_user"
          style="@style/EditTextStyle"
          android:inputType="text"
          android:hint="请输入用户名"/>

      <EditText
          android:id="@+id/et_password"
          style="@style/EditTextStyle"
          android:inputType="textPassword"
          android:hint="请输入密码"/>

      <!--添加按钮-->
      <Button
          android:id="@+id/bt_login"
          android:layout_width="match_parent"
          android:layout_height="50dp"
          android:text="登录"
          android:textColor="#ffffff"
          android:layout_marginTop="20dp"
          android:enabled="false"
          android:background="@drawable/login_bin_selector"/>
   </LinearLayout>
</RelativeLayout>
2.edit_view_shape.xml
<shape xmlns:android="http://schemas.android.com/apk/res/android"


    android:shape="rectangle">
    <corners android:radius="5dp"/>
    <stroke android:width="1dp"
        android:color="#44000000"/>

</shape>
3.input_bg_shape.xml
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
<corners android:radius="10dp"/>

</shape>
4.login_bin_selector.xml
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
<corners android:radius="10dp"/>

</shape>
5.translate.xml
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:toYDelta="100"
    android:fromYDelta="0"
    android:fillAfter="true"
    android:duration="400"

    >



</translate>
6.translate1.xml
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:toYDelta="0"
    android:fromYDelta="100"
    android:fillAfter="true"
    android:duration="500"
    >

</translate>
7.addview.style.xml
<resources>
    <!--app中的标题:字体 字号 颜色-->
    <!--共同拥有的东西-->
    <style name="EditTextStyle">
        <item name="android:layout_width">match_parent</item>
        <item name="android:layout_height">50dp</item>
        <item name="android:background"> @drawable/edit_view_shape</item>
        <item name="android:layout_marginTop">20dp</item>
        <item name="android:drawableLeft">@drawable/iconfont_user</item>
        <item name="android:paddingLeft">7dp</item>
        <item name="android:drawablePadding">7dp</item>
        <item name="android:textSize">20sp</item>
        <item name="android:maxLines">1</item>
    </style>

</resources>

8.styles.xml
<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

</resources>

3.MainActivity

public class MainActivity extends AppCompatActivity implements TextWatcher {

    private EditText user;
    private EditText password;
    private Button loginBtn;
    private ImageView leftarm;
    private ImageView rightarm;
    private ImageView leftHand;
    private ImageView rightHand;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }
public  void initView(){
        user=findViewById(R.id.et_user);
        password=findViewById(R.id.et_password);
        loginBtn=findViewById(R.id.bt_login);
        leftarm=findViewById(R.id.iv_left_arm);
        rightarm=findViewById(R.id.iv_right_arm);
        leftHand=findViewById(R.id.iv_left_hand);
         rightHand=findViewById(R.id.iv_right_hand);
        //监听内容改变 控制按钮是否可以点击
        user.addTextChangedListener(this);
        password.addTextChangedListener(this);
        //监听EditText的焦点变化->控制是否需要捂住眼睛
    password.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View view, boolean hasfocus) {
            if (hasfocus==true){
                //捂住眼睛
              close();
            }else{
                //打开
               open();
            }
        }
    });




}
    /**
     *当有控件获得焦点focus 自动弹出键盘
     * 1.点击软键盘的enter 自动收回键盘
     * 2.代码控制 InputMethodMannager
     *
     */
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if(event.getAction()==MotionEvent.ACTION_DOWN) {
            //隐藏键盘
            //1.获取系统输入的管理器
            InputMethodManager inputMethodManager=(InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
            //2.隐藏键盘
            inputMethodManager.hideSoftInputFromWindow(user.getWindowToken(),0);
            //3.取消焦点
            View focusView=getCurrentFocus();
            if(focusView!=null){
                focusView.clearFocus();
            }

         //  focusView.requestFocus();//请求焦点
        }

        return true;
    }

    @Override
    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

    }

    @Override
    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

    }

    @Override
    public void afterTextChanged(Editable editable) {
//判断两个输入框是否有内容
        if(user.getText().toString().length()>0&&password.getText().toString().length()>0){
            //按钮可以点击
            loginBtn.setEnabled(true);
        }else{
            //按钮不能点击
            loginBtn.setEnabled(false);
        }
    }
    public void  close(){
        //旋转翅膀左边
        RotateAnimation lrotateAnimation=new RotateAnimation(0,170,leftarm.getWidth(),0f);
        lrotateAnimation.setDuration(400);
        lrotateAnimation.setFillAfter(true);
//右边
        RotateAnimation rrotateAnimation=new RotateAnimation(0,-170,0f,0f);
        rrotateAnimation.setDuration(400);
        rrotateAnimation.setFillAfter(true);
        leftarm.startAnimation(lrotateAnimation);
        rightarm.startAnimation(rrotateAnimation);

        TranslateAnimation down = (TranslateAnimation) AnimationUtils.loadAnimation(this,R.anim.translate);
        leftHand.startAnimation(down);
        rightHand.startAnimation(down);
    }
    public  void open(){
        //旋转翅膀左边
        RotateAnimation lrotateAnimation=new RotateAnimation(170,0,leftarm.getWidth(),0f);
        lrotateAnimation.setDuration(400);
        lrotateAnimation.setFillAfter(true);
//右边
        RotateAnimation rrotateAnimation=new RotateAnimation(-170,0,0f,0f);
        rrotateAnimation.setDuration(400);
        rrotateAnimation.setFillAfter(true);
        leftarm.startAnimation(lrotateAnimation);
        rightarm.startAnimation(rrotateAnimation);

        TranslateAnimation up = (TranslateAnimation) AnimationUtils.loadAnimation(this,R.anim.translate1);
        leftHand.startAnimation(up);
        rightHand.startAnimation(up);
    }
}


4.心得体会

很有趣的一个demo,学多了不少关于补间动画的知识,很有意义

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容

  • 文章来自https://github.com/Blankj/AndroidStandardDevelop#安卓开发...
    小庄bb阅读 747评论 0 1
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,351评论 0 17
  • 简介 今天为大家介绍的是登录界面的搭建,使用动画使得登录界面更有趣味,话不多说,先上效果图: 实现 1. 将需要的...
    淚無痕易阅读 797评论 0 3
  • 说实话,这个标题,我给出的答案是肯定的,我一直以为抽到10000钻是骗人的,因为我从来没有抽到过。 原来,世间事,...
    傅现英阅读 512评论 3 5
  • “小清,这个忙你就帮一下吧。我们老总的女儿出国两年多了,应该不会太娇气。你就接下机,在你家过一夜,再把她送去机场。...
    关土阅读 1,061评论 7 14