私はonDraw()
Androidandroid.view.View
クラスのメソッドをインターセプトして、ビューがそれ自体を描画し終えたとき(そしてその後他の操作を起動したとき)についての手がかりを得ようとしています。
しかし、これは私にいくつかのJavaの質問を導きました(私はJavaの経験が限られています)。
My ActivityonCreate()
メソッドには、次のコードが含まれています。
LayoutInflater inflater = (LayoutInflater) getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.nessiean, null);
setContentView(view);
doSomeOperations();
サブクラスを定義しました。その主な目的は、内部状態を定義し、wait()
メソッドを提供することです。
class MyView extends View{
int state=0;
public MyView(Context context){
super(context);
}
public MyView(Context context, AttributeSet attrs){
super(context,attrs);
}
public MyView(Context context, AttributeSet attrs, int defStyle){
super(context,attrs,defStyle);
}
protected void onDraw (Canvas canvas){
super.onDraw(canvas);
state=1;
}
public void waitforDraw(){
while(state==0){};
}
}
質問は次のとおりです。
上記のように、サブクラス内のすべてのパブリックコンストラクターを再定義する必要がありますか?Javaはデフォルトでそれらを呼び出しませんか?
onCreate()
メソッドで次の行を置き換えることはできません。
View view = inflater.inflate(R.layout.nessiean, null);
と
MyView view = inflater.inflate(R.layout.nessiean, null);
エラーは次のとおりcannot convert from View to MyView
です。
ヒントはありますか?
==========================完全なコードは次のとおりです===================== =========
package com.example;
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.os.Bundle;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
public class SoundActivity extends Activity {
private Thread mWorkerThread;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//START: ALTERNATIVE WAY FOR CREATING THE VIEW
//*first variant:
//setContentView(R.layout.nessiean);
//*second variant:
LayoutInflater inflater = (LayoutInflater) getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
MyView view = (MyView) inflater.inflate(R.layout.nessiean, null);
setContentView(view);
//STOP: ALTERNATIVE WAY FOR CREATING THE VIEW
System.loadLibrary("soundtest");
mWorkerThread = new Thread(new Runnable() {
public void run() {
execute();
}
},"Worker Thread");
try{
mWorkerThread.start();
mWorkerThread.join();
}
catch (Exception e) {
System.exit(1);
}
}
private native void execute();
}
class MyView extends View{
int state=0;
public MyView(Context context){
super(context);
}
public MyView(Context context, AttributeSet attrs){
super(context,attrs);
}
public MyView(Context context, AttributeSet attrs, int defStyle){
super(context,attrs,defStyle);
}
@Override
protected void onDraw (Canvas canvas){
super.onDraw(canvas);
state=1;
}
public void waitforDraw(){
while(state==0){};
}
}