博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《Android开发艺术探索》读书笔记——Cha3.2.3改变布局参数实现View的滑动
阅读量:4315 次
发布时间:2019-06-06

本文共 3627 字,大约阅读时间需要 12 分钟。

章节来自《Android开发艺术探索》

3.2 View的滑动

3.1节介绍了View的一些基础知识和概念,本节开始介绍很重要的一个内容:View的滑动。在Android设备上,滑动几乎是应用的标配,不管是下拉刷新还是SlidingMenu,它们的基础都是滑动。从另外一方面来说,Android手机由于屏幕比较小,为了给用户呈现更多的内容,就需要使用滑动来隐藏和显示一些内容。基于上述两点,可以知道,滑动在Android开发中具有很重要的作用,不管一些滑动效果多么绚丽,归根结底,它们都是由不同的滑动外加一些特效所组成的。因此,掌握滑动的方法是实现绚丽的自定义控件的基础。通过三种方式可以实现View的滑动:第一种是通过View本身提供的scrollTo/scrollBy方法来实现滑动;第二种是通过动画给View施加平移效果来实现滑动;第三种是通过改变View的LayoutParams使得View重新布局从而实现滑动。从目前来看,常见的滑动方式就这么三种,下面一一进行分析。

 

3.2.3 改变布局参数

本节将介绍第三种实现View滑动的方法,那就是改变布局参数,即改变LayoutParams。这个比较好理解了,比如我们想把一个Button向右平移100px,我们只需要将这个Button的LayoutParams里的marginLeft参数的值增加100px即可,是不是很简单呢?还有一种情形,为了达到移动Button的目的,我们可以在Button的左边放置一个空的View,这个空View的默认宽度为0,当我们需要向右移动Button时,只需要重新设置空View的宽度即可,当空View的宽度增大时(假设Button的父容器是水平方向的LinearLayout),Button就自动被挤向右边,即实现了向右平移的效果。如何重新设置一个View的LayoutParams呢?很简单,如下所示。

    MarginLayoutParams params = (MarginLayoutParams)mButton1.getLayoutParams();

    params.width += 100;

    params.leftMargin += 100;

    mButton1.requestLayout();

    //或者mButton1.setLayoutParams(params);

通过改变LayoutParams的方式去实现View的滑动同样是一种很灵活的方法,需要根据不同情况去做不同的处理。

 

MainActivity.java

package com.example.wuf.cha323layoutparams;import android.os.Bundle;import android.os.Handler;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.view.ViewGroup;import android.widget.Button;public class MainActivity extends AppCompatActivity {    Button button;    final Handler handler = new Handler();    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        button = findViewById(R.id.btn);        button.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                new Thread(new Runnable() {                    @Override                    public void run() {                        for (int i = 0; i < 100; i++) {                            handler.postDelayed(new Runnable() {                                @Override                                public void run() {                                    ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) button.getLayoutParams();                                    params.leftMargin += 10;                                    params.topMargin += 10;                                    button.requestLayout();                                }                            }, i * 10);                        }                    }                }).start();                new Thread(new Runnable() {                    @Override                    public void run() {                        try {                            Thread.currentThread().sleep(1000);                        } catch (InterruptedException e) {                            e.printStackTrace();                        }                        for (int i = 0; i < 100; i++) {                            handler.postDelayed(new Runnable() {                                @Override                                public void run() {                                    ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) button.getLayoutParams();                                    params.leftMargin -= 10;                                    params.topMargin -= 10;                                    button.requestLayout();                                }                            }, i * 10);                        }                    }                }).start();            }        });    }}

activity_main.xml

效果:

 

转载于:https://www.cnblogs.com/volvane/p/10062829.html

你可能感兴趣的文章
vim 程序编辑器
查看>>
LIS(单调队列优化 C++ 版)(施工ing)
查看>>
刚接触Vuex
查看>>
四种加载React数据的技术对比(Meteor 转)
查看>>
Airthmetic_Approching
查看>>
操作文本文件
查看>>
公司项目的几个问题
查看>>
解决win7下打开Excel2007,报“向程序发送命令时出现问题”的错误
查看>>
Velocity快速入门教程
查看>>
关于集合常见的问题
查看>>
车牌正则表达式
查看>>
Win form碎知识点
查看>>
避免使用不必要的浮动
查看>>
第一节:ASP.NET开发环境配置
查看>>
sqlserver database常用命令
查看>>
rsync远程同步的基本配置与使用
查看>>
第二天作业
查看>>
访问属性和访问实例变量的区别
查看>>
Spring MVC 异常处理 - SimpleMappingExceptionResolver
查看>>
props 父组件给子组件传递参数
查看>>