android-什么时候调用onsizechanged()?

以下是关于“android-什么时候调用onsizechanged()?”的完整攻略:

onSizeChanged()方法

onSizeChanged()是Android View类中的一个方法,用于在View的大小发生变化时被调用。该方法的定义下:

protected void onSizeChanged(int w, int h, int oldw, int oldh)

其中,w和h表示View的新宽度和高度,oldw和oldh表示View的旧宽度和高度。

调用时机

onChanged()方法会在以下情况下被调用:

  1. View一次创建时,即在onCreate()方法之后,但在onDraw()方法之前。
    2 View的大小发生变化时,如旋转屏幕、软键盘弹出等。

示例一:自定义View

以下是一个自定义View的示例,演示了onSizeChanged()方法的调用时机:

public class MyView extends View {
    private Paint mPaint;

    public MyView(Context context) {
        super(context);
        init();
    }

    public MyView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public MyView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    private void init() {
        mPaint = new Paint();
        mPaint.setColor(Color.RED);
        mPaint.setStyle(Paint.Style.FILL);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawCircle(getWidth() / 2, getHeight() / 2, Math.min(getWidth(), getHeight()) / 2, mPaint);
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        Log.d("MyView", "onSizeChanged: w=" + w + ", h=" + h + ", oldw=" + oldw + ", oldh=" + oldh);
    }
}

以上代码中,自定义了一个View,绘制了一个圆形。在onSizeChanged()方法中,打印了View的新宽度和高度以及旧宽度和高度。

示例二:自定义ViewGroup

以下是一个自定义ViewGroup的示例,演示了onSizeChanged()方法的调用时机:

public class MyViewGroup extends ViewGroup {
    private Paint mPaint;

    public MyViewGroup(Context context) {
        super(context);
        init();
    }

    public MyViewGroup(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public MyViewGroup(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    private void init() {
        mPaint = new Paint();
        mPaint.setColor(Color.RED);
        mPaint.setStyle(Paint.Style.FILL);
    }

    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        int childCount = getChildCount();
        int left = getPaddingLeft();
        int top = getPaddingTop();
        int right = getMeasuredWidth() - getPaddingRight();
        int bottom = getMeasuredHeight() - getPaddingBottom();
        for (int i = 0; i < childCount; i++) {
            View child = getChildAt(i);
            child.layout(left, top, right, bottom);
        }
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawRect(0, 0, getWidth(), getHeight(), mPaint);
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        Log.d("MyViewGroup", "onSizeChanged: w=" + w + ", h=" + h + ", oldw=" + oldw + ", oldh=" + oldh);
    }
}

以上代码中,自定义了一个ViewGroup,绘制了一个矩形。在onSizeChanged()方法中,打印了ViewGroup的新宽度和高度以及旧宽度和高度。

以上就是关于“android-什么时候调用onsizechanged()?”的完整攻略,通过这种方式可以在View或ViewGroup的大小发生变化时进行相应的处理。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:android-什么时候调用onsizechanged()? - Python技术站

(0)
上一篇 2023年5月9日
下一篇 2023年5月9日

相关文章

  • 详解挂载运行的docker容器中如何挂载文件系统

    非常感谢您提出了这个问题。在docker中,想要将本地文件夹挂载到容器中,通常使用“-v”或“–mount”参数。下面是使用这两种参数的几个示例。 1. docker run -v示例 -v参数可以用于挂载本地文件夹到容器中。以下是使用-v参数的示例,假设我们要将本地的/my/local/folder文件夹挂载到容器的/container/folder文件…

    other 2023年6月27日
    00
  • unitydots简明教程

    下面是关于“Unity DOTS简明教程”的完整攻略: 1. Unity DOTS简介 Unity DOTS(Data-Oriented Technology Stack)是Unity引擎的一种新编程模式,它使用数据导向的方式来写游戏逻辑,以提高游戏的性能和可扩展性。Unity DOTS包括三个主要的技术:ECS(Entity System)、C# Job …

    other 2023年5月7日
    00
  • ppapi npapi

    ppapi与npapi:浏览器插件开发者需了解的重要概念 浏览器插件是指能够在浏览器中运行的第三方软件,常见的浏览器插件有Flash Player、Java等。浏览器插件的运行使得浏览器拥有了更多的功能和特性,具有极高的实用价值。 NPAPI NPAPI(Netscape Plug-in Application Programming Interface)是…

    其他 2023年3月28日
    00
  • 全新Win11体验已发布,亚马逊应用商店预览版新增 1000 多个安卓 App,任务栏支持天气

    全新Win11体验已发布,亚马逊应用商店预览版新增 1000 多个安卓 App,任务栏支持天气 Win11体验全新升级 Windows 11 是全新一代 Windows 操作系统,由 Microsoft 公司于 2021 年 6 月 24 日首次发布,主打简洁、美观、高效等特点。Win11将为用户提供更加流畅、友好的操作体验、以及全新的用户界面。 下面我们来…

    other 2023年6月25日
    00
  • uniapp开发小程序的经验总结

    Uniapp开发小程序经验总结 简介 Uniapp 是一种跨平台开发框架,可以使用 Vue.js 语法来实现开发,一份代码可以同时编译为小程序、H5、APP 等多种平台。本文将讲解在 Uniapp 开发小程序时的经验总结。 项目初始化 在创建好项目后,首先需要在 manifest.json 文件中进行配置,包括 appid、sitemapLocation、p…

    other 2023年6月27日
    00
  • java获取文件扩展名的方法小结【正则与字符串截取】

    Java获取文件扩展名的方法小结【正则与字符串截取】 在Java中,获取文件扩展名的方法有多种。本文将介绍两种常用的方法:正则表达式和字符串截取。 方法一:正则表达式 使用正则表达式可以方便地从文件名中提取出扩展名。下面是一个示例代码: import java.util.regex.Matcher; import java.util.regex.Patter…

    other 2023年8月6日
    00
  • 一段提取用户名和md5的vbs代码

    首先,我们来了解一下什么是vbs代码。VBScript是Microsoft Visual Basic Scripting Edition的缩写,是一种基于VB的脚本语言,用于Windows平台上的应用程序开发和系统管理。它可以与HTML、ASP、WMI等联合使用,广泛地应用于Web自动化测试、任务自动化和系统管理等领域。 现在,我们将解释一个提取用户名和md…

    other 2023年6月27日
    00
  • 微信小程序连接服务器展示MQTT数据信息的实现

    下面是“微信小程序连接服务器展示MQTT数据信息的实现”的完整攻略,具体步骤如下: 准备工作 安装微信开发者工具,并在工具中创建一个小程序项目; 在小程序的“app.json”文件中引入“MQTT”等需要的依赖; 在小程序中引入所需的mqtt.js库,并配置相应的参数:Broker URL、Client ID等; 实现连接服务器 创建连接服务器的函数,例如“…

    other 2023年6月26日
    00
合作推广
合作推广
分享本页
返回顶部