そのため、SurfaceViewを機能させるために約2日を費やしました。私がオンラインでフォローしているチュートリアルは、手紙をフォローしても機能しません。通常、画面が完全に真っ暗になります。
それがどのように機能するかを自分自身に教えるのを助けるために、私は機能するSurfaceViewプログラムが必要です。
別のクラスでSurfaceViewが生成されるプログラムを探しています。画面全体を赤または白に変えるだけのSurfaceViewプログラムの完全なコード(XMLおよびJava)を誰かが投稿できれば非常にありがたいです。
助けてくれてありがとう!
(コードと一緒の説明は素晴らしいでしょう!)
このリンクを試してください
私はこのチュートリアルの例に従いました。それはうまくいきます。
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>
Javaアクティビティコード
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;
}
}
カスタムSurfaceViewxmlを使用すると、次のようになります。
<customClassPackageName.CustomSurfaceViewClassName
Android:id="@+id/surfaceView"
Android:layout_width="match_parent"
Android:layout_height="0dp"
Android:layout_weight="1"/>
アクティビティ内のコード
.......
customClassPackageName.CustomSurfaceViewClassName surfaceView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
surfaceView = (customClassPackageName.CustomSurfaceViewClassName) findViewById(R.id.surfaceView);
.......
SurfaceView
Androidでは、すべての単純なレイアウトビューがすべて同じGUIスレッドに描画され、すべてのユーザー操作にも使用されます。したがって、GUIを迅速に更新する必要がある場合、またはレンダリングに時間がかかりすぎてユーザーエクスペリエンスに影響を与える場合は、SurfaceViewを使用する必要があります。
Android SurfaceViewは、ビュー階層内に埋め込まれた専用の描画サーフェスを提供します。このサーフェスの形式は制御できますが、SurfaceViewは画面上の正しい位置にサーフェスを配置します。 。
これを確認してください サンプル