android实现Materia Design风格APP(二):部分Materia Design风格的控件介绍一

本篇大部分内容学习自第一行代码第二版加上部分自己理解。介绍了,Snakebar、FloatingActionButton、CoordinateLayout、ToolBar四个控件,会的请自行跳过。

首先需要在build.gradle中依赖:

implementation 'com.android.support:design:28.0.0'

1.Snackbar

我感觉是一个增强版的Toast,可以实现Toast的功能的基础上增加了与用户的交互事件,效果如下:

使用方法:

xml布局:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    android:id="@+id/root"
    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=".Main2Activity">



</FrameLayout>

 java代码:

public class Main2Activity extends AppCompatActivity {

    @BindView(R.id.root)
    FrameLayout root;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        ButterKnife.bind(this);

        //基本使用方法与Toast类似
        //构建普通不带点击事件的Snakebar
        Snackbar.make(root, "Hello, I am is a Snakebar.", Snackbar.LENGTH_SHORT).show();

        new Thread(new Runnable() {
            @Override
            public void run() {

                SystemClock.sleep(5000);
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        //构建带点击事件的Snakebar
                        Snackbar.make(root, "Would you want to delete the first item?", Snackbar.LENGTH_SHORT)
                                .setAction("确定", new View.OnClickListener() {
                                    @Override
                                    public void onClick(View v) {

                                        Snackbar.make(root, "Delete Successful.", Snackbar.LENGTH_SHORT).show();
                                    }
                                }).show();
                    }
                });
            }
        }).start();
    }
}

 2.FloatingActionButton

立体悬浮按钮是ImageButton的子类,是一个圆形加上点阴影效果的按钮。可以通过style里的colorAccent指定背景颜色,通过src指定图片

xml布局:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    android:id="@+id/root"
    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=".Main2Activity">

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_delete"
        android:layout_gravity="end|bottom"
        android:layout_margin="16dp"/>

</FrameLayout>

java代码:

public class Main2Activity extends AppCompatActivity {

    @BindView(R.id.fab)
    FloatingActionButton fab;//悬浮按钮

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        ButterKnife.bind(this);

        //设置悬浮按钮点击事件
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //构建带点击事件的Snakebar
                Snackbar.make(fab, "Would you want to delete the first item?", Snackbar.LENGTH_SHORT)
                        .setAction("确定", new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {

                                Snackbar.make(fab, "Delete Successful.", Snackbar.LENGTH_SHORT).show();
                            }
                        }).show();
            }
        });
    }
}

3.CoordinatorLayout

加强版的FrameLayout,由Design Support库提供,使用方法参照FrameLayout,加强的地方在于可以监听其所有子控件的各种事件,然后自动帮我们做出最为合理的响应。注意layout_behavior这个新的属性,可以让被监听view随着指定该属性的子view做出反应,默认的常用值有@string/appbar_scrolling_view_behavior,大概意思就是指定了这个属性值的view并且这个view支持竖向和嵌套滑动时,appbar就可以自动的跟随view做滑动。可能说了这些还是不明白这个属性到底干什么用的,不过不要紧,那就先忽略这个属性吧,反正后面会用到,看到直观效果你就知道是干嘛用的了,别着急。

先看看CoordinatorLayout的简单用法,就是替代FrameLayout,还记得刚才FloatingActionButton的效果图吧?点击按钮Snakebar会挡住FloatingActionButton一半,而上边我们的xml布局里一直用的都是FrameLayout,现在改为CoordinateLayout我们看看效果吧。

xml代码:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    android:id="@+id/root"
    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=".Main2Activity">

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_delete"
        android:layout_gravity="end|bottom"
        android:layout_margin="16dp"/>

</android.support.design.widget.CoordinatorLayout>

java代码没有改动。

4.Toolbar

大家都很熟悉吧?actionBar的替代,之所以还要写是我之前没怎么用过,记笔记。

menu布局:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <!--showAsAction的值always一直显示,ifRoom如果有地方就显示,没有则隐藏,never一直隐藏-->
    <item android:id="@+id/backup"
        android:title="BackUp"
        android:icon="@drawable/ic_backup"
        app:showAsAction="always"/>
    <item
        android:id="@+id/delete"
        android:title="Delete"
        android:icon="@drawable/ic_delete"
        app:showAsAction="ifRoom"/>

    <item
        android:id="@+id/setting"
        android:title="Setting"
        android:icon="@drawable/ic_settings"
        app:showAsAction="never"/>
</menu>

xml布局:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    android:id="@+id/root"
    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=".Main2Activity">

    <!--定义theme指定toolBar中的子view的主题,popupTheme指定toolBar隐藏的menu打开时的主题-->
    <android.support.v7.widget.Toolbar
        android:id="@+id/toolBar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
        android:background="@color/colorPrimary"/>

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_delete"
        android:layout_gravity="end|bottom"
        android:layout_margin="16dp"/>
</android.support.design.widget.CoordinatorLayout>

java代码:

public class Main2Activity extends AppCompatActivity {

    @BindView(R.id.fab)
    FloatingActionButton fab;//悬浮按钮
    @BindView(R.id.toolBar)
    Toolbar toolbar;//toolBar

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        ButterKnife.bind(this);

        //设置toolBar的title文字
        toolbar.setTitle("ActionBar");
        //将toolBar设置为actionBar
        setSupportActionBar(toolbar);
        ActionBar actionBar = getSupportActionBar();
        //显示返回按钮
        actionBar.setDisplayHomeAsUpEnabled(true);

        //设置悬浮按钮点击事件
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //构建带点击事件的Snakebar
                Snackbar.make(fab, "Would you want to delete the first item?", Snackbar.LENGTH_SHORT)
                        .setAction("确定", new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {

                                Snackbar.make(fab, "Delete Successful.", Snackbar.LENGTH_SHORT).show();
                            }
                        }).show();
            }
        });
    }

    //设置toolBar上的menu
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.toolbar, menu);
        return true;
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Unity中,我们可以使用C#脚本来实现Materia的透明度逐渐变为0的效果。下面是一种简单的实现方式。 首先,我们需要在脚本中获取到需要逐渐变为0的Materia。假设我们已经将Materia添加到了一个名为"material"的变量中。 然后,我们可以使用一个协程来控制透明度的变化。在协程中,我们可以使用一个循环来不断减少透明度,直到为0。在每次循环中,我们可以通过修改Materia的颜色的alpha值来实现透明度的变化。 下面是一个示例代码: ```csharp using UnityEngine; public class MaterialController : MonoBehaviour { public Material material; public float fadeSpeed = 0.5f; // 透明度变化的速度 private void Start() { StartCoroutine(FadeMaterial()); } private System.Collections.IEnumerator FadeMaterial() { Color materialColor = material.color; while (materialColor.a > 0f) { float newAlpha = materialColor.a - (fadeSpeed * Time.deltaTime); materialColor = new Color(materialColor.r, materialColor.g, materialColor.b, newAlpha); material.color = materialColor; yield return null; } } } ``` 在上述示例中,我们将脚本命名为"MaterialController",并在Unity中将需要逐渐变为0的Materia赋值到"material"变量上。我们还可以通过调整"fadeSpeed"变量的值来控制透明度变化的速度。 通过启动协程"FadeMaterial",我们就可以在游戏开始时逐渐减小Materia的透明度。协程中使用的循环会在每帧中修改Materia的alpha值,直到它变为0。 ### 回答2: 在Unity中,我们可以使用脚本来实现让物体的材质透明度逐渐变为0的效果。 首先,我们需要在场景中选中要应用透明度变化的物体。然后,我们可以创建一个新的C#脚本,并附加到该物体上。 在脚本中,我们可以使用Material类来访问和修改该物体的材质属性。我们可以声明一个公共的变量来控制透明度变化的速度,例如"fadeSpeed"。 在Update函数中,我们可以使用Mathf.Lerp方法来实现透明度的渐变效果。Mathf.Lerp接受三个参数:开始值、结束值和插值比例。我们可以将材质的透明度从1(完全不透明)渐变到0(完全透明),使用fadeSpeed来控制渐变速度。 具体的代码如下: ``` C# using UnityEngine; public class FadeMaterial : MonoBehaviour { public float fadeSpeed = 0.5f; // 渐变速度 private Material material; void Start() { material = GetComponent<Renderer>().material; // 获取物体的材质 } void Update() { float currentAlpha = material.color.a; // 获取当前透明度 float newAlpha = Mathf.Lerp(currentAlpha, 0f, fadeSpeed * Time.deltaTime); // 计算新的透明度 material.color = new Color(material.color.r, material.color.g, material.color.b, newAlpha); // 更新透明度 } } ``` 在Unity编辑器中,我们将脚本附加到物体上,并调整fadeSpeed的值来控制透明度渐变的速度。运行场景后,我们会看到选定物体的材质透明度逐渐变为0,实现了渐变透明度效果。 ### 回答3: 在Unity中,可以通过以下步骤来让物体的材质透明度逐渐变为0: 1. 首先,确保你已经将材质属性设置为透明。在Unity中,打开材质的属性面板,在“渲染模式”下选择“透明”或“透明裁剪”。 2. 在脚本中,首先获取到该物体的材质。可以使用GetComponent<Renderer>()来获取物体上的渲染器组件,然后使用.material获取到材质。 3. 创建一个变量来控制透明度的变化,例如alpha,并将其初始化为1。 4. 在每一帧中,将alpha的值逐渐减小,可以使用alpha -= Time.deltaTime * fadeSpeed。 其中,Time.deltaTime是两帧之间的时间差,而fadeSpeed是控制透明度变化的速度。 5. 将新的alpha值设置给材质的颜色属性。可以使用Color类来设置rgb颜色,其中a属性表示透明度。例如,材质的颜色可以设置为new Color(1, 1, 1, alpha)。 6. 当alpha小于等于0时,可以停止透明度变化或者在透明度达到0后对物体进行其他操作。 通过以上步骤,在每一帧更新的过程中,物体的透明度将逐渐变为0,从而实现了材质逐渐变透明的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值