LoginSignup
2
1

More than 5 years have passed since last update.

surfaceviewを使って、以前はなかった問題

Posted at

surfaceviewを使って開発をしていて以前はなかった問題ですが、

touchdownの取得が遅い

という問題、touchUpまでdownも取れてない。android studio見ると何か注意みたのがあって
performClickをオーバーライドしてないだろ。と注意を受けてる

これってコード上でクリックしたことにする関数だったと思いますが、

なぜかoverrideの必要性。extendsするのも面倒なので、

a.java
glSurfaceView = new GLSurfaceView(getActivity().getApplicationContext()){
            @Override
            public boolean performClick() {
                return true;
            }
        };

こうすれば、touchdownもすんなりと受けれる。
でも注意消えないけど、取り急ぎ、動作できた。

あとは、galaxy s8で便利だなと思っていた、ホームなどのボタンの格納について

画面の縦幅の取得がおかしくなる。

というのでsurfaceview関係ないのですが、自分だとタッチの位置がずれちゃっていて、s8だとホームボタンとかがユーザーの任意で表示非表示ができるのですが(他こういう端末あるのか。。)、非表示の時の縦幅がおかしかった

a.java
DisplayMetrics displaymetrics = new DisplayMetrics();
wm.getDefaultDisplay().getMetrics(displaymetrics);
height = displaymetrics.heightPixels;

で取得していた画面の大きさ(ステータスバーも含んだ大きさ)

でだめだったのだが、

a.java
DisplayMetrics displaymetrics = new DisplayMetrics();
wm.getDefaultDisplay().getRealMetrics(displaymetrics);
height = displaymetrics.heightPixels;

これで取得ができる。がこれは古い端末には使えないので
関数名で前までの取得してた大きさを偽物としてしまっていますね。

a.java
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            wm.getDefaultDisplay().getRealMetrics(displaymetrics);
}else{
            wm.getDefaultDisplay().getMetrics(displaymetrics);
}

これで縦幅も取得できる。

ただ、面倒なのが、リサイズとかは
java:a.java
_view.addOnLayoutChangeListener(new OnLayoutChangeListener() {
@Override
public void onLayoutChange{}
});

でこの度に変更が必要そう

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1