最近誰かが私のコードにコメントし、私は次のことを宣言しました:
private Bitmap splashBackground;
private Bitmap lightDot;
private static Bitmap scaledBackground;
private static Bitmap scaledLightDot;
彼らは、サティックビットマップを宣言しないように私にアドバイスしました。
しかし、私はすべてを試しましたが、静的であると宣言しない限り、コードは機能しません。
また、「public static Bitmap createScaledBitmap(Bitmap src、int dstWidth、int dstHeight、boolean filter)」が公式のAndroidデベロッパーサイトに表示されているようですので、何をすべきか、何をすべきでないかについて少し混乱しています。
任意のポインタをいただければ幸いです-ありがとう
編集:明確にするために:
宣言から静的を削除すると、onDraw()メソッドに到達するまでに、スケーリングされたビットマップはnullになります。(私はinitialise()メソッドでスケーリングされたビットマップオブジェクトを作成しています。作成されると、それは有効です(つまり、nullではありません)-しかし、静的として宣言しない限り、onDrawでnullになるようです。
アクティビティクラスからinitialise()メソッドを呼び出しています。
編集:要求に応じてより多くのコード。
OnCreateメソッド:ご覧のとおり、画面の高さと幅を渡して、スケーリングされたビットマップを作成できるようにしています。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
displaySplashScreen= new SplashScreen(this);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
// set View
setContentView(new SplashScreen(this));
WindowManager w = getWindowManager();
Display d = w.getDefaultDisplay();
int width=d.getWidth();
int height=d.getHeight();
displaySplashScreen.initialise(width, height);
}
私の初期化方法:
public void initialise(int w, int h)
{
//Get width and height (passed in from Activity)
vwidth=w;
vheight=h;
//Create pre-scaled bitmaps
scaledBackground = Bitmap.createScaledBitmap(splashBackground, vwidth, vheight, true);
scaledLightDot = Bitmap.createScaledBitmap(lightDot, vwidth, vheight, true);
}
また、同じ方法で標準変数(int number;など)を使用し、それをinitalise(number = 5;)に設定すると、初期化メソッドのnumberは5になります。onDraw()からログに記録すると、常に「0」が繰り返し返されます。それは困惑しています。
これまでの皆さん、ありがとうございました。さらにコードが必要な場合はお知らせください......