Android 3D编程入门示例:GLSurfaceView与OpenGL渲染

版权申诉
0 下载量 147 浏览量 更新于2024-08-25 收藏 71KB PDF 举报
本资源是一份关于Android 3D编程的示例教程,主要涉及的是使用OpenGL ES(OpenGL for Embedded Systems)在Android平台上创建3D图形。文档以`TextDemoActivity.java` 和 `OpenGLRender.java` 两个Java文件为核心,展示了如何在Android应用中实现一个简单的3D场景。 `TextDemoActivity.java` 是一个名为 `TextDemoActivity` 的Activity类,它是Android应用程序中的主要入口点。在这个类中,第7行创建了一个名为 `OpenGLRender` 的实例,这表明 `OpenGLRender` 类将负责渲染3D图形。在第11行,通过 `GLSurfaceView` 将渲染器设置到视图中,`GLSurfaceView` 是Android提供的一个组件,用于显示OpenGL ES绘制的内容。在第12行,调用 `setContentView(gview)` 方法,将这个3D视图添加到Activity的布局中,使用户能够看到渲染的结果。 `OpenGLRender.java` 是实现渲染逻辑的`Renderer`接口的类。Renderer是OpenGL ES中定义的基本接口,用于处理渲染管道的各个阶段。在这个类中,关键的部分包括: 1. 定义两个浮点数组 `triggerBuffer` 和 `quadBuffer`,分别表示一个三角形和一个正方形的顶点坐标。这些顶点数据被用于构建3D形状。 2. `rotateTri` 和 `rotateQuad` 是旋转角度变量,可能用于实现图形的动态旋转效果。 3. 在`Renderer`接口的实现部分,没有直接提供具体的3D渲染代码,但可以推测这部分会包含`onDrawFrame(GL10 gl)`方法,该方法会在每一帧调用,执行OpenGL ES的绘图操作,如设置颜色、纹理、变换矩阵等,然后使用给定的顶点数据绘制三角形或正方形。 总结来说,这份资源介绍了如何在Android应用中利用OpenGL ES进行基础的3D图形编程,主要包括创建GLSurfaceView、设置渲染器以及管理顶点数据。开发者可以通过阅读和理解这些代码,学习如何在Android平台创建简单的3D场景,并进一步扩展到更复杂的图形渲染和动画效果。如果你想要深入学习Android 3D编程,建议继续研究`onDrawFrame()`方法以及相关的OpenGL ES函数,如glBegin(), glVertex3f(), glRotatef()等。

# -*- coding: UTF-8 -*- from lib2to3.pgen2 import driver from appium import webdriver from appium.webdriver.common.appiumby import AppiumBy el1 = driver.find_element(by=AppiumBy.ACCESSIBILITY_ID, value="通讯录") el1.click() el2 = driver.find_element(by=AppiumBy.XPATH, value="/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout[1]/android.widget.FrameLayout/android.widget.ListView/android.widget.FrameLayout[3]/android.widget.RelativeLayout") el2.click() el3 = driver.find_element(by=AppiumBy.XPATH, value="/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout[2]/android.view.ViewGroup/android.view.ViewGroup/androidx.recyclerview.widget.RecyclerView/android.view.ViewGroup[1]/android.widget.TextView") el3.click() el4 = driver.find_element(by=AppiumBy.XPATH, value="/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout[2]/android.view.ViewGroup/android.view.ViewGroup/androidx.recyclerview.widget.RecyclerView/android.view.ViewGroup[8]") el4.click() el5 = driver.find_element(by=AppiumBy.XPATH, value="/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout[2]/android.view.ViewGroup/android.view.ViewGroup/androidx.recyclerview.widget.RecyclerView/android.view.ViewGroup[11]") el5.click()

2023-06-08 上传

E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.intenttest, PID: 8155 android.content.ActivityNotFoundException: Unable to find explicit activity class {com.example.intenttest/com.example.intenttest.MyActivity}; have you declared this activity in your AndroidManifest.xml? at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:2049) at android.app.Instrumentation.execStartActivity(Instrumentation.java:1709) at android.app.Activity.startActivityForResult(Activity.java:5192) at androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.java:597) at android.app.Activity.startActivityForResult(Activity.java:5150) at androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.java:583) at android.app.Activity.startActivity(Activity.java:5521) at android.app.Activity.startActivity(Activity.java:5489) at com.example.intenttest.MainActivity$2.onClick(MainActivity.java:60) at android.view.View.performClick(View.java:7125) at android.view.View.performClickInternal(View.java:7102) at android.view.View.access$3500(View.java:801) at android.view.View$PerformClick.run(View.java:27336) at android.os.Handler.handleCallback(Handler.java:883) at android.os.Handler.dispatchMessage(Handler.java:100) at android.os.Looper.loop(Looper.java:214) at android.app.ActivityThread.main(ActivityThread.java:7356) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)

2023-05-25 上传

优化此布局<com.google.android.material.textfield.TextInputLayout android:id="@+id/usernameLayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="24dp" android:hint="用户名" layout_height="" layout_width="" xmlns:android="http://schemas.android.com/apk/res/android"> <com.google.android.material.textfield.TextInputEditText android:id="@+id/usernameEditText" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="text" android:maxLines="1" /> <com.google.android.material.textfield.TextInputLayout android:id="@+id/passwordLayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="16dp" android:hint="密码"> <com.google.android.material.textfield.TextInputEditText android:id="@+id/passwordEditText" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="textPassword" android:maxLines="1" /> <com.google.android.material.textfield.TextInputLayout android:id="@+id/phoneLayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="16dp" android:hint="密码"> <com.google.android.material.textfield.TextInputEditText android:id="@+id/phoneEditText" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="textPassword" android:maxLines="1" /> </com.google.android.material.textfield.TextInputLayout> <Button android:id="@+id/registerButton" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="16dp" android:text="注册" /> </com.google.android.material.textfield.TextInputLayout>

2023-05-28 上传