表面视图示例
SurfaceView Example
所以我花了大约两天的时间试图让一个工作 SurfaceView
。我在网上关注的教程即使严格遵守也无法正常工作。我通常会得到一个全黑的屏幕。
为了帮助自学它是如何工作的,我需要一个有效的 SurfaceView
程序。
我正在寻找一个在单独的 class 中生成 SurfaceView
的程序。如果有人能够 post 一个 SurfaceView
程序的完整代码(XML 和 Java),我将不胜感激。
感谢您的帮助!
(任何解释以及代码都会很棒!)
试试这个 link
我遵循了这个教程示例。它工作正常。
编辑
SurfaceView
的简单代码
布局xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<SurfaceView
android:id="@+id/surfaceView"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
</LinearLayout>
JavaActivity代码
import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.SurfaceView;
import android.view.ViewGroup;
import android.view.WindowManager;
public class Main2Activity extends AppCompatActivity{
SurfaceView surfaceView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
surfaceView = (SurfaceView) findViewById(R.id.surfaceView);
//Method for making the activity full screen
//With SurfaceView
makeItFullScreen();
}
private void makeItFullScreen(){
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
getSupportActionBar().hide();
//Changing SurfaceView background color
surfaceView.setBackgroundColor(Color.RED);
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
ViewGroup.LayoutParams videoLayoutParams = surfaceView.getLayoutParams();
videoLayoutParams.width = displayMetrics.widthPixels;
videoLayoutParams.height = displayMetrics.heightPixels;
ViewGroup.LayoutParams videoParams = surfaceView.getLayoutParams();
videoParams.width = displayMetrics.widthPixels;
videoParams.height = displayMetrics.heightPixels;
}
}
编辑2
如果你使用自定义的SurfaceView xml会是这样..
<customClassPackageName.CustomSurfaceViewClassName
android:id="@+id/surfaceView"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
里面的代码Activity
.......
customClassPackageName.CustomSurfaceViewClassName surfaceView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
surfaceView = (customClassPackageName.CustomSurfaceViewClassName) findViewById(R.id.surfaceView);
.......
曲面视图
在Android中,所有简单的布局视图都绘制在同一个 GUI 线程上,该线程也用于所有用户交互。所以如果我们需要快速更新GUI或者渲染时间过长影响用户体验那么我们应该使用SurfaceView。
AndroidSurfaceView 提供了一个嵌入在视图层次结构中的专用绘图表面。您可以控制此表面的格式,但是,SurfaceView 负责将表面放置在屏幕上的正确位置。
勾选这个sample
所以我花了大约两天的时间试图让一个工作 SurfaceView
。我在网上关注的教程即使严格遵守也无法正常工作。我通常会得到一个全黑的屏幕。
为了帮助自学它是如何工作的,我需要一个有效的 SurfaceView
程序。
我正在寻找一个在单独的 class 中生成 SurfaceView
的程序。如果有人能够 post 一个 SurfaceView
程序的完整代码(XML 和 Java),我将不胜感激。
感谢您的帮助!
(任何解释以及代码都会很棒!)
试试这个 link
我遵循了这个教程示例。它工作正常。
编辑
SurfaceView
布局xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<SurfaceView
android:id="@+id/surfaceView"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
</LinearLayout>
JavaActivity代码
import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.SurfaceView;
import android.view.ViewGroup;
import android.view.WindowManager;
public class Main2Activity extends AppCompatActivity{
SurfaceView surfaceView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
surfaceView = (SurfaceView) findViewById(R.id.surfaceView);
//Method for making the activity full screen
//With SurfaceView
makeItFullScreen();
}
private void makeItFullScreen(){
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
getSupportActionBar().hide();
//Changing SurfaceView background color
surfaceView.setBackgroundColor(Color.RED);
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
ViewGroup.LayoutParams videoLayoutParams = surfaceView.getLayoutParams();
videoLayoutParams.width = displayMetrics.widthPixels;
videoLayoutParams.height = displayMetrics.heightPixels;
ViewGroup.LayoutParams videoParams = surfaceView.getLayoutParams();
videoParams.width = displayMetrics.widthPixels;
videoParams.height = displayMetrics.heightPixels;
}
}
编辑2
如果你使用自定义的SurfaceView xml会是这样..
<customClassPackageName.CustomSurfaceViewClassName
android:id="@+id/surfaceView"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
里面的代码Activity
.......
customClassPackageName.CustomSurfaceViewClassName surfaceView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
surfaceView = (customClassPackageName.CustomSurfaceViewClassName) findViewById(R.id.surfaceView);
.......
曲面视图
在Android中,所有简单的布局视图都绘制在同一个 GUI 线程上,该线程也用于所有用户交互。所以如果我们需要快速更新GUI或者渲染时间过长影响用户体验那么我们应该使用SurfaceView。
AndroidSurfaceView 提供了一个嵌入在视图层次结构中的专用绘图表面。您可以控制此表面的格式,但是,SurfaceView 负责将表面放置在屏幕上的正确位置。
勾选这个sample