运行有问题或需要源码数据集请点赞关注收藏后评论区留言~~~
图形Drawable
Android把所有能够显示的图形都抽象为Drawable类,这里的图形不止是图片,还包括色块,画板,背景等等。包含图片在内的图形文件放在res的目录的各个drawable目录下,其实drawable目录一般保存描述性的XML文件,而图片文件一般放在具体分辨率的drawable目录下
形状图形
Shape图形又称形状图形,它用来描述常见的几何形状,用好形状图形可以让App页面不再呆板,还可以节省美工不少工作量。
形状图形的定义文件放在drawable目录下,它是以shape标签为为根节点的XML描述文件,根节点下定义了6个节点 分别是以下六个
size 尺寸 stroke 描边 corners 圆角 solid 填充 padding 间隔 gradient 渐变
接下来演示一下形状图形的界面效果,首先右击drawable目录,并依次选择右键菜单的New -drawable resouruce file 然后ok即可生成一个XML文件 效果如下
DrawableShape类代码如下
package com.example.chapter05;
import android.os.Bundle;
import android.view.View;
import androidx.appcompat.app.AppCompatActivity;
public class DrawableShapeActivity extends AppCompatActivity implements View.OnClickListener {
private View v_content; // 声明一个视图对象
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_drawable_shape);
// 从布局文件中获取名叫v_content的视图
v_content = findViewById(R.id.v_content);
// v_content的背景设置为圆角矩形
v_content.setBackgroundResource(R.drawable.shape_rect_gold);
// 给btn_rect设置点击监听器
findViewById(R.id.btn_rect).setOnClickListener(this);
// 给btn_oval设置点击监听器
findViewById(R.id.btn_oval).setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.btn_rect) { // 点击了“圆角矩形背景”按钮
// v_content的背景设置为圆角矩形
v_content.setBackgroundResource(R.drawable.shape_rect_gold);
} else if (v.getId() == R.id.btn_oval) { // 点击了“椭圆背景”按钮
// v_content的背景设置为椭圆形状
v_content.setBackgroundResource(R.drawable.shape_oval_rose);
}
}
}
圆角矩形的shape_rect_goldXML文件代码如下
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- 指定了形状内部的填充颜色 -->
<solid android:color="#ffdd66" />
<!-- 指定了形状轮廓的粗细与颜色 -->
<stroke
android:width="1dp"
android:color="#aaaaaa" />
<!-- 指定了形状四个圆角的半径 -->
<corners android:radius="10dp" />
</shape>
椭圆形的shape_oval_roseXML文件代码如下
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval" >
<!-- 指定了形状内部的填充颜色 -->
<solid android:color="#ff66aa" />
<!-- 指定了形状轮廓的粗细与颜色 -->
<stroke
android:width="1dp"
android:color="#aaaaaa" />
</shape>
九宫格图片
将某张图片设置成视图背景时,如果图片尺寸太小,则系统会自动拉伸图片使之填满背景,可是一旦图片拉的过大,画面就会容易变得模糊,为了解决这个问题,Android专门设计了点九图片,扩展名为png,又带有.9的名字,因为该图片划分了3×3的九宫格区域 效果如下
状态列表图形
常见的图形一般为静态图形,但有时会用到动态图形,比如按钮控件的背景在正常情况下时凸起的,在按下时时凹陷的,从按下到弹起的过程,用户便知道了点击了该按钮,根据不同的触摸情况变更图形状态,这种情况用到了Drawable的一个子类StateListDrawable,它在XML文件中规定了不同状态时候所呈现的图形列表 效果如下
可见按下了定制样式的按钮后颜色就变了 区分出不同
DrawableState类代码如下
package com.example.chapter05;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
public class DrawableStateActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_drawable_state);
}
}
btn_nine_selectorXML文件代码如下
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/button_pressed" />
<item android:drawable="@drawable/button_normal" />
</selector>
btn_orig_selectorXML文件代码如下
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/button_pressed" />
<item android:drawable="@drawable/button_normal_orig" />
</selector>
activity_drawable_stateXML文件代码如下
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="5dp"
android:text="默认样式的按钮"
android:textColor="@color/black"
android:textSize="17sp" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="5dp"
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:background="@drawable/btn_nine_selector"
android:text="定制样式的按钮"
android:textColor="@color/black"
android:textSize="17sp" />
</LinearLayout>
创作不易 觉得有帮助请点赞关注收藏~~~