2011-12-31 9 views
0

私はキャンバスを使用して画面上のタッチを検出するコードを作成しています。現在、キャンバスは直接描画されています。xmlの他の要素からなるビューの一部として追加する方法はこちらです。コードアンドロイドでビューのキャンバス部分を表示するにはどうすればいいですか?

public class Tutorial2D extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(new Panel(this)); 
    } 
} 

ここでは、この上の任意のスニペットをメインXMLにこのキャンバスを追加すると、画像の上に表示されてどのように

public class Panel extends SurfaceView implements SurfaceHolder.Callback { 

private ViewThread mThread; 
private ArrayList<Element> mElements = new ArrayList<Element>(); 

public Panel(Context context) { 
    super(context); 
    getHolder().addCallback(this); 
    mThread = new ViewThread(this); 
} 

public void doDraw(Canvas canvas) { 
    canvas.drawColor(Color.TRANSPARENT); 
    synchronized (mElements) { 
     for (Element element : mElements) { 
      element.doDraw(canvas); 
     } 
    } 
} 

@Override 
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { 
    // TODO Auto-generated method stub 
} 

@Override 
public void surfaceCreated(SurfaceHolder holder) { 
    if (!mThread.isAlive()) { 
     mThread = new ViewThread(this); 
     mThread.setRunning(true); 
     mThread.start(); 
    } 
} 

@Override 
public void surfaceDestroyed(SurfaceHolder holder) { 
    if (mThread.isAlive()) { 
     mThread.setRunning(false); 
    } 
} 

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    synchronized (mElements) { 
     mElements.add(new Element(getResources(), (int) event.getX(), (int) event.getY())); 
    } 
    return super.onTouchEvent(event); 
} 

}

またはどのようにすべきの他の一部であり、私はこのコードの作業を変更し、何でもb e greatful.Thanks

答えて

1

はPanelクラス用に、このコンストラクタを試してみてください:

public Panel(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    getHolder().addCallback(this); 
    mThread = new ViewThread(this); 
} 
+0

MainクラスからAttributeSetを呼び出す方法 – Karthik

1

xmlレイアウトのカスタムビューをパッケージ名で使用することができます。例えば、main.xml中:

あなたの活動の onCreateで次に
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 
    <TextView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:text="Hello" /> 
    <your.package.name.Panel 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 
</LinearLayout> 

、:

setContentView(R.layout.main); 
+0

私はこれを試してみましたが、呼び出す方法コーディングのパネル部分。これを単独で完成させると機能しません。追加する必要があるものは何ですか? – Karthik

+0

あなたはしません。 'R.layout.main'を使用して、xmlファイルをポイントします。このファイルは' Panel'をポイントします。 'your.package.name'を' Panel'の実際のパッケージ名に置き換えることを忘れないでください。 – chiuki

+0

私はこれを試しましたが、パネルを全く検出していません – Karthik

関連する問題