–
1.获得当前的容器视图对象
//1、获取activity_view.xml中LinearLayout对象
//2、也可以给LinearLayout添加@+id/,然后通过findViewById关联控件也能获取LinearLayout对象
LinearLayout linearLayout =
(LinearLayout)getLayoutInflater().inflate(R.layout.activity_view,null);
//加载布局文件
setContentView(linearLayout);
2.获得或创建待添加的视图对象
EditText editText = new EditText(this);
editText.setHint(“请输入内容”);
3.将相应的视图对象添加到容器视图中
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//1、获取activity_view.xml中LinearLayout对象
//2、也可以给LinearLayout添加@+id/,然后通过findViewById关联控件也能获取LinearLayout对象
LinearLayout linearLayout =
(LinearLayout)getLayoutInflater().inflate(R.layout.activity_view,null);
//加载布局文件
setContentView(linearLayout);
EditText editText = new EditText(this);
editText.setHint(“请输入内容”);
linearLayout.addView(editText);
}
效果图如下:
总结
–
-
实际上不管使用那种方式,他们创建Android用户界面行为的本质是完全一样的。大部分时候,设置UI组件的XML属性还有对应的方法。
-
对于View类而言,它是所有UI组件的基类,因此它包含的XML属性和方法是所有组件都可以使用的。
自定义View
=======
为什么要自定义View
Android系统提供了一系列的原生控件,但这些原生控件并不能够满足我们的需求时,我们就需要自定义View了。
自定义View的基本方法
自定义View的最基本的三个方法分别是: onMeasure()、onLayout()、onDraw(); View在Activity中显示出来,要经历测量、布局和绘制三个步骤,分别对应三个动作:measure、layout和draw。
-
测量:onMeasure()决定View的大小;
-
布局:onLayout()决定View在ViewGroup中的位置;
-
绘制:onDraw()决定绘制这个View。
需要用到的两个对象
-
Canvas(画布),可在画布上面绘制东西,绘制的内容取决于所调用的方法。如drawCircle方法,用来绘制圆形,需要我们传入圆心的x和y坐标,以及圆的半径。
-
Paint(画笔),用来告诉画布,如何绘制那些要被绘制的对象。
这两个方法暂时了解就行,如果拓展开,这不够写,后面可能会针对这两个对象单独拉一个章节出来。
自绘控件View实例
1、直接继承View类
自绘View控件时,最主要工作就是绘制出丰富的内容,这一过程是在重写的onDraw方法中实现的。由于是View,它没有子控件了,所以重写onLayout没有意义。onMeasure的方法可以根据自己的需要来决定是否需要重写,很多情况下,不重写该方法并不影响正常的绘制。
/**
* 创建人:scc
* 功能描述:自定义View
*/
public class CustomView extends View {
private Paint paint;
//从代码创建视图时使用的简单构造函数。
public CustomView(Context context) {
super(context);
}
//从XML使用视图时调用的构造函数。
public CustomView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
//View的绘制工作
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//实例化画笔对象
paint = new Paint();
//给画笔设置颜色
paint.setColor(Color.RED);
//设置画笔属性
//paint.setStyle(Paint.Style.FILL);//画笔属性是实心圆
paint.setStyle(Paint.Style.STROKE);//画笔属性是空心圆
paint.setStrokeWidth(10);//设置画笔粗细
//cx:圆心的x坐标;cy:圆心的y坐标;参数三:圆的半径;参数四:定义好的画笔
canvas.drawCircle(getWidth() / 4, getHeight() / 4, 150, paint);
}
}
2、在布局 XML 文件中使用自定义View
<com.scc.demo.view.CustomView
android:id=“@+id/view_circle”
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”/>
3、实现效果:
性能优化
====
在自定义View时需要注意,避免犯以下的性能错误
-
在非必要时,对View进行重绘。
-
绘制一些不被用户所看到的的像素,也就是过度绘制。(被覆盖的地方)
-
在绘制期间做了一些非必要的操作,导致内存资源的消耗。
可进一步了解和优化
- View.invalite()是最最广泛的使用操作,因为在任何时候都是刷新和更新视图最快的方式。
在自定义View时要小心避免调用非必要的方法,因为这样会导致重复强行绘制整个视图层级,消耗宝贵的帧绘制周期。检查清楚View.invalite()和View.requestLayout()方法调用时间位置,因为这会影响整个UI,导致GPU和它的帧速率变慢。
- 避免过渡重绘。为了避免过渡重绘,我们可以利用Canvas方法,只绘制控件中所需要的部分。整个一般在重叠部分或控件时特别有用。相应的方法是Canvas.clipRect()(指定要被绘制的区域);
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
最后
其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。
以上分享【我的阿里P7移动开发架构师学习笔记】七大模块整套学习资料均免费分享,需要的小伙伴,我已经上传到石墨文档了,大家自取就可以了。白嫖可以,别忘了给我点个关注哈。
当然我也为你们整理好了百度、阿里、腾讯、字节跳动等等互联网超级大厂的历年面试真题集锦。这也是我这些年来养成的习惯,一定要学会把好的东西,归纳整理,然后系统的消化吸收,这样才能极大的提高学习效率和成长进阶。碎片、零散化的东西,我觉得最没有价值的。就好比你给我一张扑克牌,我只会觉得它是一张废纸,但如果你给我一副扑克牌,它便有了它的价值。这和我们收集资料就要收集那些系统化的,是一个道理。
如果你需要,我把他放在GitHub了,无偿分享的。
【Android架构视频+BATJ面试专题PDF+学习笔记】
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。
,这样才能极大的提高学习效率和成长进阶。碎片、零散化的东西,我觉得最没有价值的。就好比你给我一张扑克牌,我只会觉得它是一张废纸,但如果你给我一副扑克牌,它便有了它的价值。这和我们收集资料就要收集那些系统化的,是一个道理。
如果你需要,我把他放在GitHub了,无偿分享的。
【Android架构视频+BATJ面试专题PDF+学习笔记】
[外链图片转存中…(img-zp4aQ8mO-1711293864399)]
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。