ITPub博客

首页 > 应用开发 > IT综合 > 如何设置直播软件源码View子类的背景

如何设置直播软件源码View子类的背景

IT综合 作者:云豹科技晓彤 时间:2021-10-26 17:13:24 0 删除 编辑

今天我们以Button和TextView为例,看看如何设置直播软件源码View子类的背景。

Button 按钮

Button能对用户的点击行为作出反应。 在xml文件中放置一个button。

<Button
     android:id="@+id/btn"
     android:layout_height="wrap_content"
     android:layout_width="wrap_content"
     android:text="@string/self_destruct" />

要想监听到 button 的点击事件,我们在 Activity 中进行设置。

public class MyActivity extends Activity {
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.content_layout_id);
         final Button button = findViewById(R.id.button_id);
         button.setOnClickListener(new View.OnClickListener() {
             public void onClick(View v) {
                 // 这里是按钮点击事件,在主线程执行
             }
         });
     }
 }

上面我们用到了 View.OnClickListener。button 被点击后会执行 onClick方法。 直播软件源码会在App的主线程中执行 onClick方法。我们可以在这里面更新UI。但不要做太耗时的操作。

我们注意到 OnClickListener 其实是 View 中的一个接口。setOnClickListener 也是View 的一个方法。 换句话说,就算我们这里用的不是 button,也可以用这样的方式来监听点击事件。 即 View.setOnClickListener(View.OnClickListener())

以后会遇到TextView,ImageView监听点击事件,或是整个Layout来监听点击事件。 这里直播软件源码使用的是监听器模式。

实际上,Button继承自TextView。

Button,TextView背景设置

如何给按钮增加动感?

Button 有按下(pressed)和未按下之分,我们可给这 2 种状态不同的背景颜色和文字颜色。本文要介绍的是 selector,即状态列表。 和前面的 shape 类似, selector也是一个xml文件。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="
</selector>

设置Button背景

  • 准备shape文件

先准备shape文件。这里准备3个shape。分别代表3个不同的状态。

shape_btn_1_normal.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="
    android:shape="rectangle">
    <solid android:color="#6CB3DD" />
    <corners android:radius="2dp" />
</shape>

shape_btn_1_pressed.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="
    android:shape="rectangle">
    <solid android:color="#1E6283" />
    <corners android:radius="4dp" />
</shape>

shape_btn_disable.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="
    android:shape="rectangle">
    <solid android:color="#6D6D6D" />
</shape>
  • 新建selector文件

新建drawable文件 bg_1.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="
    <item android:drawable="@drawable/shape_btn_disable" android:state_enabled="false" />
    <item android:drawable="@drawable/shape_btn_1_normal" android:state_enabled="true" android:state_pressed="false" />
    <item android:drawable="@drawable/shape_btn_1_pressed" android:state_enabled="true" android:state_pressed="true" />
</selector>
  • 设置Button背景

在layout中设置背景。

<Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/bg_1"
        android:text="RFDev btn 1" />
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="12dp"
        android:background="@drawable/bg_1"
        android:enabled="false"
        android:text="RFDev btn 2" />

运行一下看看效果。按下按钮和没按下的时候,直播软件源码按钮的背景颜色是不同的。

selector介绍

StateListDrawable 是在 XML 文件中定义的可绘制对象,它会根据对象状态,使用多个不同的图像来表示同一个图形。

例如,Button 微件可以是多种不同状态(按下、聚焦或这两种状态都不是)中的其中一种,并且可利用状态列表可绘制对象,为每种状态提供不同的背景图片。 可以在 XML 文件中描述状态列表。每个图形由单一  <selector> 元素内的  <item> 元素表示。每个  <item> 均使用各种属性来描述应用作可绘制对象的图形的状态。 在每个状态变更期间,将从上到下遍历状态列表,并使用第一个与当前状态匹配的项目 — 此选择并非基于“最佳匹配”,而是选择符合状态最低条件的第一个项目。 selector指向的是StateListDrawable,这里我们不关注StateListDrawable,只关注xml。

语法

参考如下语法:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="
    android:constantSize=["true" | "false"]
    android:dither=["true" | "false"]
    android:variablePadding=["true" | "false"] >
    <item
        android:drawable="@[package:]drawable/drawable_resource"
        android:state_pressed=["true" | "false"]
        android:state_focused=["true" | "false"]
        android:state_hovered=["true" | "false"]
        android:state_selected=["true" | "false"]
        android:state_checkable=["true" | "false"]
        android:state_checked=["true" | "false"]
        android:state_enabled=["true" | "false"]
        android:state_activated=["true" | "false"]
        android:state_window_focused=["true" | "false"] />
</selector>

使用注意事项

我们可以给 Button 设置背景,也可以给 TextView 设置同样的背景。

<TextView
        android:id="@+id/tv1"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_marginTop="12dp"
        android:background="@drawable/bg_1"
        android:gravity="center"
        android:text="RFDev text view 1" />

bg_1中设置了 state_pressed的。 如果TextView没有设置点击事件,直播软件源码用户点击或按着这个TextView是不会发生背景变化的。 给TextView设置点击事件后,再点击就可以看到背景变化了。

本文我们用Button和TextView来做例子,实际上View的其它子类,比如ImageView,LinearLayout,直播软件源码都可以用这种方式设置背景。
声明:本文由云豹科技转发自Android_安子博客,如有侵权请联系作者删除


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/70002045/viewspace-2839396/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
音视频软件开发相关知识科普账号

注册时间:2021-06-11

  • 博文量
    149
  • 访问量
    32680