当前位置:首页 » 编程语言 » javaview

javaview

发布时间: 2022-10-10 06:58:46

java中view类下为什么在类名称中可以有点号,比如View.OnClickListener

在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。广泛意义上的内部类一般来说包括这四种:成员内部类、局部内部类、匿名内部类和静态内部类。

成员内部类是最普通的内部类,它的定义为位于另一个类的内部,形如下面的形式:

classCircle{
doubleradius=0;
publicCircle(doubleradius){
this.radius=radius;
}
classDraw{//内部类
publicvoiddrawSahpe(){
System.out.println("drawshape");
}
}
}

这样看起来,类Draw像是类Circle的一个成员,Circle称为外部类。成员内部类可以无条件访问外部类的所有成员属性和成员方法(包括private成员和静态成员)。不过要注意的是,当成员内部类拥有和外部类同名的成员变量或者方法时,会发生隐藏现象,即默认情况下访问的是成员内部类的成员。如果要访问外部类的同名成员,需要以下面的形式进行访问:

外部类.this.成员变量
外部类.this.成员方法

虽然成员内部类可以无条件地访问外部类的成员,而外部类想访问成员内部类的成员却不是这么随心所欲了。在外部类中如果要访问成员内部类的成员,必须先创建一个成员内部类的对象,再通过指向这个对象的引用来访问,成员内部类是依附外部类而存在的,也就是说,如果要创建成员内部类的对象,前提是必须存在一个外部类的对象。创建成员内部类对象的一般方式如下

publicclassTest{
publicstaticvoidmain(String[]args){
//第一种方式:
Outteroutter=newOutter();
Outter.Innerinner=outter.newInner();//必须通过Outter对象来创建

//第二种方式:
Outter.Innerinner1=outter.getInnerInstance();
}
}

classOutter{
privateInnerinner=null;
publicOutter(){

}

publicInnergetInnerInstance(){
if(inner==null)
inner=newInner();
returninner;
}

classInner{
publicInner(){

}
}
}

Ⅱ Java android中的View具体指什么

简单来说就是你在手机上能看到:比如按钮、菜单等
和看不到的:比如布局等。
都是View

Ⅲ android studio java 继承View错误

没有引入View ,光标移到View然后ALT+ENTET

Ⅳ java怎样输出不换行

System.out.println()这个是在输出内容之后换行,而 System.out.print()输出内容之后不换行。只是一个 ln 的差距。

public class ArrayDemo {

public static void main(String[] args) {

int[] arr = { 11, 22, 33, 44, 55 };

System.out.print("[");

for (int x = 0; x < arr.length; x++) {

if (x == arr.length - 2) {

System.out.println(arr[x] + "]");

当x==0时:执行else中的语句,结果是:[11]

当x==1时:执行else中的语句,结果是:[11 22]

当x==2时:执行else中的语句,结果是:[11 22 33]

当x==3时:执行 if 中的语句,结果是:[11 22 33 44],此处执行完就会换行

当x==4时:执行else中的语句,结果是:[11 22 33 44]结束。

(4)javaview扩展阅读:

当编辑并运行一个Java程序时,需要同时涉及到这四种方面。使用文字编辑软件(例如记事本、写字板、UltraEdit等)或集成开发环境(Eclipse、MyEclipse等)在Java源文件中定义不同的类,通过调用类(这些类实现了Java API)中的方法来访问资源系统;

把源文件编译生成一种二进制中间码,存储在class文件中,然后再通过运行与操作系统平台环境相对应的Java虚拟机来运行class文件,执行编译产生的字节码,调用class文件中实现的方法来满足程序的Java API调用。

Ⅳ java中设计模式中Control、View之间的调用

我觉得你弄错了C和V的关系,应该是这样的:
Control a=new Control();
View b=new View();
b.setSomeListenner(a);
然后,视图b在触发某些事件的时候,比如某个按钮被点击的时候,去调用a的相关方法。

另外楼上说的也行得通,把view当做参数传回去就行嘛。

Ⅵ java中setViewportView()的作用是啥

看API:
setViewportView
public void setViewportView(Component view)创建一个视口(如果有必要)并设置其视图。不直接为 JScrollPane 构造方法提供视图的应用程序应使用此方法指定将显示在滚动窗格中的滚动组件子级。例如:
JScrollPane scrollpane = new JScrollPane();
scrollpane.setViewportView(myBigComponentToScroll);
应用程序不应将子级直接添加到滚动窗格。

Ⅶ JAVA View类

v代表具有View这个类的属性的一个对象

Ⅷ View显示原理

Android设备的显示屏被抽象成一个帧缓冲区(frame buffer,fb)。SurfaceFlinger通过向这个帧缓冲区写入内容来绘制界面。在硬件抽象层被封装成Gralloc模块。

用户空间的应用进程先假装gralloc模块,用gralloc模块申请图形缓冲区,并映射入本进程空间,写入要绘制的内容。然后把图形缓冲区、通过fb、写入帧缓冲区

分配图形缓冲区,有两种方式,一种是直接在帧缓冲区上分配图形缓冲区,这样的话写入的内容就相当于直接写入帧缓冲区。第二种是在进程空间分配图形缓冲区,这使用的是匿名贡献内存。一般情况下,只有SurfaceFlinger会在帧缓冲区直接分配,而用户程序和SurfaceFlinger都会用匿名共享内存。

在内存中分配图形缓冲区的方法,也是需要通过SurfaceFlinger,由其创建一块匿名共享内存,然后和请求分配的进程共享。

Surface的创建过程就是Activity的显示过程,在 ActivityThread.handleResumeActivity() 中调用了 Activity.makeVisible()具体实现:

WindowManagerImpl中的addView

WindowManagerGlobal中的addView

ViewRootImpl中的构造函数

在创建ViewRootImpl的时候会创建Surface,也会创建WindowSession用于和WMS通信,同时也会创建Choreographer他是存储在ThreadLocal中的也就是每一个线程都有一个

WindowManagerGlobal中的getWindowSession()

WindowManagerService.openSession:

ViewRootImpl.setView()

WindowManagerService的addWindow

ViewRootImpl的requestLayout()

会调用scheleTraversals,这里方法里会设置一个标记位防止多次调用requestLayout(),然后设置一个消息屏障屏蔽普通消息,丢一个异步消息到Choreographer,在下一次Vsync信号来的时候执行Runnable调动doTraversals,然后调用performTraversals,开始执行performMeasure,performLayout,performDraw。这里会调到draw方法

此时的Surface是空的,什么都没有。需要向WMS汇报,然后绑定到native层的Surface
performTraversals()会调到relayoutWindow(),在 relayoutWindow() 中会调用 IWindowSession 的 relayout(),这是一个跨进程方法会调用到 WMS 中的 Session.relayout(),最后调用到 WindowManagerService.relayoutWindow()

WindowManagerService.java::WindowState:

构造Surface对象

WMS向SurfaceFlinger通过SurfaceControl申请一块Buffer然后将它和将它和Java层的Surface绑定在一起
SurfaceControl 类可以看作是一个 wrapper 类,它封装了一些函数,通过这些函数可以方便地调用 mClient 或 ISurface 提供的函数。最后会执行 From() 返回给 App 客户端

From 期间一共有三个关键对象,它们分别是:SurfaceComposerClient、 SurfaceControl、Surface,这个 Surface 对象属于 Native 层,和 Java 层的 Surface 相对应其中转移到 ViewRoot 成员变量 mSurface 中的,就是最后这个 Surface 对象了。

在 SurfaceFlinger 进程中,Client 的一个 Layer 将使SharedBufferStack 数组中的一个成员,并通过 SharedBufferServer 结构来控制这个成员, SurfaceFlinger 是消费者,所以可由 SharedBufferServer 来控制数据的读取。与之相对应,客户端的进程也会有一个对象来使用这个 SharedBufferStack,可它是通过另外一个叫 SharedBufferClient 的结构来控制的。客户端为 SurfaceFlinger 提供数据,所以可由 SharedBufferClient 控制数据的写入

如图所示,在 App 进程中创建 PhoneWindow 后会创建 ViewRoot。ViewRoot 的创建会创建一个 Surface,这个 Surface 其实是空的,通过与 WindowManagerService 通信 From() 一个NativeSurface。在与 SurfaceFlinger 通信时,会创建 SharedClient 一段共享内存,里面存放的是 SharedBufferStack 对应 SurfaceFlinger 中的 SurfaceLayer 每个 Layer 其实是一个 FrameBuffer,每个 FrameBuffer 中有两个 GraphicBuffer 记作 FrontBuffer 和 BackBuffer。
在SurfaceFlinger 中 SharedBufferServer 来管理 FrameBuffer。同时在 App 端 From() 出来 NativeSurface 时会创建一个 SharedBufferClient 与 SharedClient 这块共享内存关联。当客户端 addView() 或者需要更新 View 时,会通过 SharedBufferClient 写入数据到 ShareClient 中,SurfaceFlinger 中的 SharedBufferServer 接收到通知会将 FrameBuffer 中的数据传输到屏幕上。

持有现在和下一个状态,以及目前Surface数据,和显示设备数组。已GraphicPlane对象来管理系统的显示设备
有三种线程:

渲染过程

surfaceflinger是一个守护进程,

Zygote启动System进程在执行System的main方法,会加载android_servers库,会调用SurfaceFlinger.instantiate()方法。
SurfaceFlinger启动之前,Binder驱动已经启动好了,于是它把自己加入Binder线程池。接下来启动UI渲染线程。再创建一个对象描述显示屏,这个过程中会创建控制台线程,监控控制台事件。
开辟一块匿名共享内存,将显示屏的信息写在上面。

参考
https://www.cnblogs.com/blogs-of-lxl/p/11272756.html
https://fourfire.top/#/Android_Framework/View%E6%98%AF%E6%80%8E%E4%B9%88%E7%94%BB%E5%87%BA%E6%9D%A5%E7%9A%84%EF%BC%88%E4%BA%8C%EF%BC%89%E2%80%94%E2%80%94SurfaceFlinger
https://blog.csdn.net/yangwen123/article/details/12192401
https://blog.csdn.net/vviccc/article/details/104860616
https://www.jianshu.com/p/198701520cd7?utm_campaign=haruki&utm_content=note&utm_medium=reader_share&utm_source=weixin

热点内容
pythonldap模块 发布:2024-12-21 23:39:29 浏览:216
115ftp 发布:2024-12-21 23:38:02 浏览:253
服务推荐算法 发布:2024-12-21 23:32:55 浏览:530
手机加载配置信息失败是什么意思 发布:2024-12-21 23:31:16 浏览:652
为什么服务器鱼塔不刷鱼 发布:2024-12-21 23:29:37 浏览:277
sqlserverjson 发布:2024-12-21 23:21:47 浏览:890
手机如何设置超级滑屏密码 发布:2024-12-21 23:05:34 浏览:445
录歌安卓用什么耳机好 发布:2024-12-21 22:51:01 浏览:813
python需要安装什么 发布:2024-12-21 22:50:09 浏览:494
计算机c语言考试 发布:2024-12-21 22:43:19 浏览:393