Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 何时使用自定义视图?-安卓_Android_Layout_View - Fatal编程技术网

Android 何时使用自定义视图?-安卓

Android 何时使用自定义视图?-安卓,android,layout,view,Android,Layout,View,我正在升级我的Android游戏。我已经看到,对于游戏,开发者应该使用自定义视图。但是为什么以及何时应该使用自定义视图而不是使用布局XML?自定义视图在某些情况下很有用: 从视觉上来说,创建一些不平凡的东西——比如说,你想自己在屏幕上画一些东西——图形 提高性能-这可能是游戏的主要原因-当布局有深度嵌套时(膨胀、在彼此内部布局多个视图、布局重叠时过度拉伸),布局可能会严重影响性能,您可以通过使用自定义视图将自己绘制到屏幕来解决这些问题。 此外,通过自定义视图,您可以使用GPU直接在屏幕上绘制一

我正在升级我的Android游戏。我已经看到,对于游戏,开发者应该使用自定义视图。但是为什么以及何时应该使用自定义视图而不是使用布局XML?

自定义视图在某些情况下很有用:

  • 从视觉上来说,创建一些不平凡的东西——比如说,你想自己在屏幕上画一些东西——图形
  • 提高性能-这可能是游戏的主要原因-当布局有深度嵌套时(膨胀、在彼此内部布局多个视图、布局重叠时过度拉伸),布局可能会严重影响性能,您可以通过使用自定义视图将自己绘制到屏幕来解决这些问题。
    此外,通过自定义视图,您可以使用GPU直接在屏幕上绘制一些东西,这得益于硬件加速操作
  • 有时,使用xml布局强制执行自动调整不同设备大小的复杂布局是非常重要/不可能的任务,在自定义视图中,您可以创建复杂的动态布局

自定义视图在某些情况下很有用:

  • 从视觉上来说,创建一些不平凡的东西——比如说,你想自己在屏幕上画一些东西——图形
  • 提高性能-这可能是游戏的主要原因-当布局有深度嵌套时(膨胀、在彼此内部布局多个视图、布局重叠时过度拉伸),布局可能会严重影响性能,您可以通过使用自定义视图将自己绘制到屏幕来解决这些问题。
    此外,通过自定义视图,您可以使用GPU直接在屏幕上绘制一些东西,这得益于硬件加速操作
  • 有时,使用xml布局强制执行自动调整不同设备大小的复杂布局是非常重要/不可能的任务,在自定义视图中,您可以创建复杂的动态布局

当您对android SDK中不可用的视图有特殊要求时,基本上需要自定义视图。例如,对于我的一个应用程序,我需要一个ImageView,可以将其高度设置为接收到的宽度的1.5倍 所以我做了一个自定义图像视图

public class CustomImageView extends ImageView {

    private static final float ASPECT_RATIO = 1.5f;

    public CustomImageView(Context context) {
        super(context);
    }

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

    public CustomImageView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int width = MeasureSpec.getSize(widthMeasureSpec);
        int height = Math.round(width * ASPECT_RATIO);
        setMeasuredDimension(width, height);
    }
}

当您对android SDK中不可用的视图有特殊要求时,基本上需要自定义视图。例如,对于我的一个应用程序,我需要一个ImageView,可以将其高度设置为接收到的宽度的1.5倍 所以我做了一个自定义图像视图

public class CustomImageView extends ImageView {

    private static final float ASPECT_RATIO = 1.5f;

    public CustomImageView(Context context) {
        super(context);
    }

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

    public CustomImageView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int width = MeasureSpec.getSize(widthMeasureSpec);
        int height = Math.round(width * ASPECT_RATIO);
        setMeasuredDimension(width, height);
    }
}

自定义视图膨胀xml?当您需要使用Android SDK未提供的东西时,您可以使用(实际上是编码)自定义视图。如果你能用“布局XML”实现你所需要的,那么它不是一个自定义视图。我指的是一个扩展视图类的Java类,所以对于一个简单的菜单(比如标题和播放按钮),我必须使用布局XML,而不是创建一个扩展视图类的新Java类?你仍然可以在自定义视图中使用XML。自定义视图膨胀XML?你使用(实际上是代码)当您需要使用Android SDK不提供的东西时,可以自定义视图。如果您可以使用“布局XML”实现所需的功能,那么它就不是一个自定义视图。我指的是一个Java类,它扩展了视图类,因此只需一个简单的菜单(如标题和播放按钮)我必须使用布局XML,而不是创建扩展视图类的新java类?您仍然可以在自定义视图中使用XML。如果我有一个包含标题和播放按钮的简单菜单,我应该使用自定义视图吗?或者更好地使用布局?布局,当你一无所获时,不需要过于复杂,我已经提到了一些布局无法实现的要点(在特定情况下),如果布局符合你的UI要求,并且没有性能问题,那么布局(大多数情况下就像你的简单用例一样)如果我有一个简单的菜单,其中有一个标题和一个播放按钮,我应该使用自定义视图吗?或者更好地使用布局?布局,当你一无所获时,不需要过于复杂,我已经提到了一些布局无法实现的要点(在特定情况下),如果布局符合你的UI要求,并且没有性能问题,那么布局(大多数情况下就像你的简单用例一样)我想我可以使用LinearLayout.LayoutParams将它的高度设置为宽度的1.5倍如果我使用的是线性布局是的,你可以,但是这里我有一个视图,它不需要调用LinearLayoutParams,而且在我的代码中,我已经做了很多计算,考虑了很多事情,这个自定义视图帮助我减少了麻烦,而且这是一个简单的实现,仅供参考。自定义视图的一个很好的例子就是这个库。我想我可以使用LinearLayout.LayoutParams将它的高度设置为宽度的1.5倍。如果我使用线性布局是的,你可以,但是这里我有一个视图,它不需要调用LinearLayoutParams,而且在我的代码中,我已经做了很多计算,考虑了很多事情,所以,这个自定义视图帮助我减少了麻烦,而且这是一个简单的实现,仅供参考,customView的一个好例子就是这个库