android utiliser une Vue à partir d'un XML de mise en page pour dessiner une toile

Donc, fondamentalement, je veux utiliser un xml de mise en page, mais je veux aussi une toile où je peux avoir des graphiques effectués. Ce que j'ai fait a été de rendre une vue de mon xml de mise en page comme vous pouvez le voir ci-dessous. Ensuite, dans mon application j'ai fait le point de vue de tirage de la toile, mais il ne fonctionne pas. Je ne sais pas si ma méthode pour résoudre ce qui est totalement faux ou quoi. Donc, s'il vous plaît prendre un coup d'oeil à mon code et me dire si vous voyez une solution rapide ou si vous avez une meilleure méthode. Merci d'avance j'ai vraiment l'apprécier.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<Button
    android:id="@+id/bTest"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Button" />



<View
    android:id="@+id/vMain"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

</LinearLayout>

qui est de la mise en page xml

package sm.view.test;

import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Align;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.Button;

public class ViewActivity extends Activity implements OnTouchListener {
/** Called when the activity is first created. */

View v;
Button b;
boolean isRun =true;
SurfaceHolder ourHolder;
Thread ourThread;
Canvas canvas;
boolean isTure = true;
TheSurface ourSurfaceView;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    b= (Button) findViewById(R.id.bTest);
    v = (View) findViewById(R.id.vMain);

    canvas = new Canvas();
    ourSurfaceView = new TheSurface(this);
    ourSurfaceView.setOnTouchListener(this);
    v.draw(canvas);
   //v.setBackgroundColor(Color.BLUE);
}
protected void onPause() {
    //TODO Auto-generated method stub
    super.onPause();
    ourSurfaceView.pause();
}

@Override
protected void onResume() {
    //TODO Auto-generated method stub
    super.onResume();
    ourSurfaceView.resume();
}






public boolean onTouch(View arg0, MotionEvent arg1) {
    //TODO Auto-generated method stub
    return false;
}
public class TheSurface extends SurfaceView implements Runnable{

    public TheSurface(Context context) {
        super(context);
        ourHolder= getHolder();

    }
    public void resume(){
        isRun= true;
        ourThread = new Thread(this);
        ourThread.start();  
    }
    public void pause(){
        isRun = false;
        while(true){
            try {
                ourThread.join();
            } catch (InterruptedException e) {
                //TODO Auto-generated catch block
                e.printStackTrace();
            }
            break;
        }
        ourThread= null;
    }

    public void run() {
        //TODO Auto-generated method stub

        Paint textPaint = new Paint();
        textPaint.setColor(Color.WHITE);
        while(isTure){
        if(!ourHolder.getSurface().isValid())
            continue;
        //v.draw(canvas);

         canvas = ourHolder.lockCanvas();
        canvas.drawLine(0, 0, canvas.getWidth(), canvas.getHeight(), textPaint);
        ourHolder.unlockCanvasAndPost(canvas);
        v.draw(canvas);
        }
    }

}

}

Comment êtes-vous sûr qu'il ne fonctionne pas. Je vois une toile (le plus souvent un fond blanc), et de la peinture que vous utilisez, être fixées à la Couleur.Blanc. Blanc sur blanc ne signifie pas visible!!!
bien l'arrière-plan est automatiquement noire. Afin de montrer une ligne blanche devrait s'afficher.
Pourquoi êtes-vous créer une SurfaceView de ne jamais l'attacher à l'écran? Cela se sent comme toutes sortes de mal. Pourquoi ne pas simplement ajouter votre SurfaceView sous-classe pour le xml de mise en page?
Bon à savoir, dans le passé, lorsque j'ai voulu directe toile de dessin, j'ai sous-classé une UIView objet de mon propre. Vous essayez peut-être plutôt que d'avoir vue générique que vous essentiellement d'essayer de passer votre surface d'affichage sur, définir votre personnalisé SurfaceView "comme" votre point de vue dans le fichier XML. Puis mettre en œuvre le onDraw de routine à l'intérieur de cet objet. J'ai vraiment obtenu ce travail.
ok, alors quel est le code xml afin de mettre la SurfaceView sous-classe pour le xml de mise en page? désolé, je suis nouveau en programmation. Merci pour les réponses de tout le monde.

OriginalL'auteur steven minkus | 2012-06-22