web-dev-qa-db-ja.com

SurfaceViewの例

そのため、SurfaceViewを機能させるために約2日を費やしました。私がオンラインでフォローしているチュートリアルは、手紙をフォローしても機能しません。通常、画面が完全に真っ暗になります。

それがどのように機能するかを自分自身に教えるのを助けるために、私は機能するSurfaceViewプログラムが必要です。

別のクラスでSurfaceViewが生成されるプログラムを探しています。画面全体を赤または白に変えるだけのSurfaceViewプログラムの完全なコード(XMLおよびJava)を誰かが投稿できれば非常にありがたいです。

助けてくれてありがとう!

(コードと一緒の説明は素晴らしいでしょう!)

5
Frenchie

このリンクを試してください

Ansroid SurfaceViewの例

私はこのチュートリアルの例に従いました。それはうまくいきます。

編集

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;
  }

}

Edit2

カスタム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);
    .......
5
user4696837

SurfaceView

Androidでは、すべての単純なレイアウトビューがすべて同じGUIスレッドに描画され、すべてのユーザー操作にも使用されます。したがって、GUIを迅速に更新する必要がある場合、またはレンダリングに時間がかかりすぎてユーザーエクスペリエンスに影響を与える場合は、SurfaceViewを使用する必要があります。

Android SurfaceViewは、ビュー階層内に埋め込まれた専用の描画サーフェスを提供します。このサーフェスの形式は制御できますが、SurfaceViewは画面上の正しい位置にサーフェスを配置します。 。

これを確認してください サンプル

2
Arnold Brown