心得体会
很久没有写我的简书了。有些东西似乎需要细嚼慢咽,当你一下子接触一个你不是很能听懂的代码的时候,私下里多花点时间将这一段代码中所包含的相关知识点一片一片掰碎了咽进去,似乎也不是那么难以下咽。
目录
-
1.需求效果
-
2.去除标题栏
-
3.虚化背景图片
-
4.输入框布局
-
5.实现动画效果
-
6.工程源码
具体操作
一、需求效果
本次项目需要创建一个动画登录界面。所谓动画登录界面,即是在实现一般登录界面效果的前提下,给登录界面添加动画效果。实现效果如下:
二、去除标题栏
在初步开发Android应用中,我们会遇到一个问题,顶部标题栏的名字是项目名字(app名字)并且不可编辑。项目开发中有去除标题栏的需求。
- 打开
res->values->styles.xml
,将DarkActionBar
修改为NoActionBar
三、虚化背景图片
1.虚化图片可以用JAVA代码实现,但这个方法比较复杂。一般我们采用使用第三方库来实现。可以在GitHub搜索blurkit,如图所示:
2.然后将
implementation 'io.alterac.blurkit:blurkit:1.1.0'
插入到build.gradle(Module:app)
如下图所示:(ps:直接插入可能会插入失败,有可能是minSdkVersion版本问题,这时只需要将版本改为21就好)
3.检查第三方库是否导入成功
打开
Project->External Libraries
界面,查找是否有Gradle:io.alterac.blurkit:blurkit:1.1.0@aar
,如果有,则证明该第三方包导入成功4.使用第三方库添加背景图片---在xml里面添加一个虚化层
<!--添加虚化层-->
<io.alterac.blurkit.BlurLayout
android:layout_width="match_parent"
android:layout_height="match_parent"/>
-
此时的虚化效果如下(效果不是很好,虚化的太过了):
- 根据第三方库继续设置,改变其虚化值
<io.alterac.blurkit.BlurLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
app:blk_fps="0"
app:blk_blurRadius="20"/>
-
虚化效果如下:(这里有一点小缺陷,就是背景图片最右边一小部分感觉没有被虚化,有可能是第三方库的代码问题)
四、输入框布局
1.输入框背景框
- 在
res->drawable->New->Drawable resource file
新建一个input_bg_shape.xml(文件名可以自行设置)
,用来设置输入框背景框的颜色,形状等属性
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="10dp"/>
<solid android:color="#44666666"/>
</shape>
- 在xml里面设置输入框背景框的其他属性(包括居中,左间距,右间距等)
<!--输入框背景框-->
<View
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"/>
2.添加标题和输入框视图
- 在
res->drawable->New->Drawable resource file
新建一个editview_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>
- xml配置
<!--添加标题和输入框视图-->
<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:layout_width="match_parent"
android:layout_height="50dp"
android:background="@drawable/editview_shape"
android:layout_marginTop="20dp"
android:drawableLeft="@drawable/iconfont_user"
android:paddingLeft="7dp"
android:drawablePadding="7dp"
android:textSize="20dp"
android:hint="请输入用户名"
android:maxLines="1"
android:inputType="text"/>
<EditText
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="@drawable/editview_shape"
android:layout_marginTop="20dp"
android:drawableLeft="@drawable/iconfont_user"
android:paddingLeft="7dp"
android:drawablePadding="7dp"
android:textSize="20dp"
android:hint="请输入密码"
android:maxLines="1"
android:inputType="text"/>
</LinearLayout>
-
思考:这里使用了两个EditText编辑框来实现登录框的用户名和密码输入的功能。但我们仔细观察,可以发现两个EditText编辑框的内容有很多地方是一样的。那么我们是否可以用一种方法来简化我们的代码呢?
下面是简化该代码的实现方法
在
values->styles->New->Value resource file
里面新建一个editview_style.xml(文件名可以自定义)
来管理编辑框共同的样式
<!--将编辑框中共有的东西抽出来-->
<style name="EditTextStyle">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">50dp</item>
<item name="android:background">@drawable/editview_shape</item>
<item name="android:layout_marginTop">20dp</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>
在xml里面(此时运行效果与之前是一样的,可以发现代码被简化了)
<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">
<EditText
style="@style/EditTextStyle"
android:drawableLeft="@drawable/iconfont_user"
android:hint="请输入用户名"
android:inputType="text"/>
<EditText
style="@style/EditTextStyle"
android:drawableLeft="@drawable/iconfont_password"
android:hint="请输入密码"
android:inputType="textPassword"/>
</LinearLayout>
3.添加登录按钮
- 直接在上面线性布局里面添加一个按钮
<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
style="@style/EditTextStyle"
android:drawableLeft="@drawable/iconfont_user"
android:hint="请输入用户名"
android:inputType="text"/>
<EditText
style="@style/EditTextStyle"
android:drawableLeft="@drawable/iconfont_password"
android:hint="请输入密码"
android:inputType="textPassword"/>
<!--添加按钮-->
<Button
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="登录"
android:textColor="#ffffff"
android:layout_marginTop="20dp"/>
</LinearLayout>
- 思考:按钮有两种不同的状态(点击和不点击),如何实现这一效果呢?
- 在
res->drawable->New->Drawable resource file
新建一个login_btn_selector.xml(文件名可以自行设置)
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!--无法点击的状态:灰色背景 圆角矩形-->
<item android:state_enabled="false">
<shape android:shape="rectangle">
<corners android:radius="5dp"/>
<solid android:color="#666666"/>
</shape>
</item>
<!--正常状态:蓝色背景 圆角矩形-->
<item>
<shape android:shape="rectangle">
<corners android:radius="5dp"/>
<solid android:color="#39A4F9"/>
</shape>
</item>
</selector>
- 在xml里面使用一下,即在<Button>里面添加
android:background="@drawable/login_btn_selector"
4.键盘隐藏(实现点击除键盘和编辑框的任意位置,键盘隐藏)
@Override
public boolean onTouchEvent(MotionEvent event) {
//如果被点击了
if(event.getAction()==MotionEvent.ACTION_DOWN){
//隐藏键盘
//1.获取系统输入的管理器
InputMethodManager inputManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
//2.隐藏键盘
inputManager.hideSoftInputFromWindow(user.getWindowToken(),0);
}
return true;
}
其中
user
为任意给的界面里的一个控件。即要隐藏键盘,只需要得到界面里面的任何一个控件。
EditText user = findViewById(R.id.et_user);
5.实现在两个编辑框内(即用户名和密码的输入框内)都有内容,此时按钮可以点击,否则按钮无法点击
//监听内容改变->控制按钮的点击状态
user.addTextChangedListener(this);
password.addTextChangedListener(this);
@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);
}j
}
6.实现监听EditText的焦点变化,判断猫头鹰是否需要捂住眼睛
//监听EditText的焦点变化 -> 控制是否需要捂住眼睛
password.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean b) {
if(b ==true){
//捂住眼睛
Toast t = Toast.makeText(getApplicationContext(),"捂住眼睛", Toast.LENGTH_SHORT);
t.show();
}else{
//打开
Toast.makeText(getApplicationContext(),"放手", Toast.LENGTH_SHORT).show();
}
}
});
- 注意:此时由于隐藏键盘时焦点没有改变,所以当键盘隐藏时猫头鹰的状态并没有改变,因此这里我们需要在隐藏键盘之后取消焦点(当焦点为空时取消焦点会报错,因此需要先判断焦点是否为空
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
//隐藏键盘
//1.获取系统输入的管理器
InputMethodManager inputManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
//2.隐藏键盘
inputManager.hideSoftInputFromWindow(user.getWindowToken(), 0);
//3.取消焦点
View focusView = getCurrentFocus();
if (focusView != null) {
focusView.clearFocus();//取消焦点
// focusView.requestFocus();//请求焦点
}
}
五、实现动画效果
1.添加猫头鹰控件
<!--猫头鹰-->
<RelativeLayout
android:layout_width="300dp"
android:layout_height="200dp"
android:layout_centerHorizontal="true">
<!--猫头鹰头像-->
<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:layout_width="80dp"
android:layout_height="80dp"
android:src="@drawable/icon_hand"
android:layout_alignParentLeft="true"
android:layout_alignBottom="@id/iv_head"
android:layout_marginBottom="-30dp"/>
<ImageView
android:layout_width="80dp"
android:layout_height="80dp"
android:src="@drawable/icon_hand"
android:layout_alignParentRight="true"
android:layout_alignBottom="@id/iv_head"
android:layout_marginBottom="-30dp"/>
<!--翅膀-->
<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"/>
<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"/>
</RelativeLayout>
2.实现动画
- 给翅膀添加动画---MainActivity创建
public void close(){
//旋转左边翅膀
RotateAnimation lAnim = new RotateAnimation(0,170, leftArm.getWidth(),0f);
lAnim.setDuration(500);
lAnim.setFillAfter(true);
leftArm.startAnimation(lAnim);
//旋转右边翅膀
RotateAnimation rAnim = new RotateAnimation(0,-170,0f,0f);
rAnim.setDuration(500);
rAnim.setFillAfter(true);
rightArm.startAnimation(rAnim);
}
public void open(){
//旋转左边翅膀
RotateAnimation lAnim = new RotateAnimation(170,0, leftArm.getWidth(),0f);
lAnim.setDuration(500);
lAnim.setFillAfter(true);
leftArm.startAnimation(lAnim);
//旋转右边翅膀
RotateAnimation rAnim = new RotateAnimation(-170,0,0f,0f);
rAnim.setDuration(500);
rAnim.setFillAfter(true);
rightArm.startAnimation(rAnim);
}
- 给手掌添加动画---XML配置
新建Project->app->src->main->res->New->Directory
,文件名为anim
新建anim->New->Animation Resource File
上移动画hand_up_anim.xml
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:toYDelta="0"
android:fromYDelta="100"
android:fillAfter="true"
android:duration="500">
</translate>
下移动画hand_down_anim.xml
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:toYDelta="100"
android:fromYDelta="0"
android:fillAfter="true"
android:duration="500">
</translate>
执行动画
TranslateAnimation down = (TranslateAnimation) AnimationUtils.loadAnimation(this,R.anim.hand_down_anim);
leftHand.startAnimation(down);
rightHand.startAnimation(down);
TranslateAnimation up = (TranslateAnimation) AnimationUtils.loadAnimation(this,R.anim.hand_up_anim);
leftHand.startAnimation(up);
rightHand.startAnimation(up);
3.实现功能:将猫头鹰头部以下部分进行虚化(即下图所圈猫头鹰部分)
利用第三方库实现,并且添加
app:blk_fps="0"
表示只虚化一次
<!--输入框背景框-->
<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"/>
六、工程源码
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">
<!--背景图片-->
<!--fitXY:没有比例的拉伸,高度宽度全填满-->
<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="20"/>
<!--猫头鹰-->
<RelativeLayout
android:layout_width="300dp"
android:layout_height="200dp"
android:layout_centerHorizontal="true"
android:layout_alignTop="@id/bg"
android:layout_marginTop="-100dp"
>
<!--猫头鹰头像-->
<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:drawableLeft="@drawable/iconfont_user"
android:hint="请输入用户名"
android:inputType="text"/>
<EditText
android:id="@+id/et_password"
style="@style/EditTextStyle"
android:drawableLeft="@drawable/iconfont_password"
android:hint="请输入密码"
android:inputType="textPassword"/>
<!--添加按钮-->
<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_btn_selector"/>
</LinearLayout>
</RelativeLayout>
MainActivity.java
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.animation.RotateAnimation;
import android.view.animation.TranslateAnimation;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;
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);
initViews();
}
public void initViews(){
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 b) {
if(b ==true){
//捂住眼睛
close();
}else{
//打开
open();
}
}
});
}
/**
*当有控件获得焦点focus 自动弹出键盘
* 1.点击软键盘的enter键 自动收回键盘
* 2.代码控制 InputMethodManager
* showSoftInput:显示键盘 必须先让这个view成为焦点requestFocus
* hideSoftInputFromWindow:隐藏键盘
*/
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
//隐藏键盘
//1.获取系统输入的管理器
InputMethodManager inputManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
//2.隐藏键盘
inputManager.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 lAnim = new RotateAnimation(0,170, leftArm.getWidth(),0f);
lAnim.setDuration(500);
lAnim.setFillAfter(true);
leftArm.startAnimation(lAnim);
//旋转右边翅膀
RotateAnimation rAnim = new RotateAnimation(0,-170,0f,0f);
rAnim.setDuration(500);
rAnim.setFillAfter(true);
rightArm.startAnimation(rAnim);
TranslateAnimation down = (TranslateAnimation) AnimationUtils.loadAnimation(this,R.anim.hand_down_anim);
leftHand.startAnimation(down);
rightHand.startAnimation(down);
}
public void open(){
//旋转左边翅膀
RotateAnimation lAnim = new RotateAnimation(170,0, leftArm.getWidth(),0f);
lAnim.setDuration(500);
lAnim.setFillAfter(true);
leftArm.startAnimation(lAnim);
//旋转右边翅膀
RotateAnimation rAnim = new RotateAnimation(-170,0,0f,0f);
rAnim.setDuration(500);
rAnim.setFillAfter(true);
rightArm.startAnimation(rAnim);
TranslateAnimation up = (TranslateAnimation) AnimationUtils.loadAnimation(this,R.anim.hand_up_anim);
leftHand.startAnimation(up);
rightHand.startAnimation(up);
}
}
-
input_bg_shape.xml
(res->drawable->New->Drawable resource file)
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="10dp"/>
</shape>
-
editview_shape.xml
(res->drawable->New->Drawable resource file)
<?xml version="1.0" encoding="utf-8"?>
<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>
-
editview_style.xml
(values->styles->New->Value resource file)
<?xml version="1.0" encoding="utf-8"?>
<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/editview_shape</item>
<item name="android:layout_marginTop">20dp</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>
-
login_btn_selestor.xml
(res->drawable->New->Drawable resource file)
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!--无法点击的状态:灰色背景 圆角矩形-->
<item android:state_enabled="false">
<shape android:shape="rectangle">
<corners android:radius="5dp"/>
<solid android:color="#666666"/>
</shape>
</item>
<!--正常状态:蓝色背景 圆角矩形-->
<item>
<shape android:shape="rectangle">
<corners android:radius="5dp"/>
<solid android:color="#39A4F9"/>
</shape>
</item>
</selector>
给手掌添加动画
- 新建Project->app->src->main->res->New->Directory,文件名为anim(文件名固定)
-
hand_up_anim.xml
(anim->New->Animation Resource File)
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:toYDelta="0"
android:fromYDelta="100"
android:fillAfter="true"
android:duration="500">
</translate>
-
hand_down_anim.xml
(anim->New->Animation Resource File)
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:toYDelta="100"
android:fromYDelta="0"
android:fillAfter="true"
android:duration="500">
</translate>