2011-12-15 12 views
0

* "bouton"ボタンを押した後、 "maview"という名前のパネルに線を描きたいと思います。しかし、私のプログラムはレイアウト全体に線を引いて、ボタンは消えます。 アイデアはありますか?ありがとうございました! * 私のコード:パネル上での描画

package esslineter.pack; 
import android.app.Activity; 
import android.os.Bundle; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.view.View; 
import android.widget.TextView; 
import android.content.Context; 

public class EsslineterActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView (R.layout.main); 
    } 
    public void bouton (View view) 
    { 
     maView cv=new maView(this); 
     setContentView(cv); cv.invalidate(); 
    } 
    public class maView extends View 
    {    
      public maView(Context context) 
      { 
       super(context);     
      } 
      @Override 
      protected void onDraw(Canvas canvas) 
     { 
      Paint p = new Paint(); 
      p.setColor(Color.WHITE); 
      p.setStyle(Paint.Style.STROKE); 
      p.setStrokeWidth(3); 
      canvas.drawColor(Color.BLUE);      
      canvas.drawLine(0,0, 100, 100, p);           
     }     
    } 
} 

私のレイアウト:ここで

<?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" > 
    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="@string/hello" /> 
    <Button 
     android:id="@+id/bouton1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:onClick="bouton" 
     android:text="draw line" /> 
    <View class="EsslineterActivity.maView" 
     android:id="@+id/surfaceView1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="0.86" /> 
</LinearLayout> 

答えて

0

はバグがあなたのonClickリスナーである:

maView cv=new maView(this); 
setContentView(cv); 

あなたは既にonCreateでの活動のためのビューを提供 - ここにアクティビティの基本ビューはmaViewになるはずです。このコードを次のコードに変更してください:

maView cv = (maView) findViewById(R.id.surfaceView1); 

ここでは新しいビューを作成するのではなく、既存のものを作成してそこに描画します。

+0

ありがとう、ありがとう、あなたが言うことを正確に行うと、私は "キャッチされていない例外(グループ= 0x40015560)で終了スレッド" ... – user1098281

+0

あなたは完全なエラーログを提供することはできますか? – Jin35

+0

12-16 14:23:28.692:I /プロセス(652):送信信号。 PID:652 SIG:9 12-16 14:24:31.572:D/AndroidRuntime(702):VMをシャットダウンする 12-16 14:24:31.572:W/dalvikvm(702):threadid = 1:未知の例外(グループ= 0x40015560) 12-16 14:24:31.682:E/AndroidRuntime(702):致命的な例外:メイン 12-16 14:24:31.682:E/AndroidRuntime(702):java.lang.IllegalStateException :アクティビティのメソッドを実行できませんでした 12-16 14:24:31.682:E/AndroidRuntime(702):\t android.view.View $ 1.onClick(View.java:2144) – user1098281

0

setContentView(cv)に電話すると、すべてが消えるようにアクティビティレイアウト全体が変更され、maViewが画面に表示される唯一のビューになります。

XMLレイアウト(android:visibility="gone")でビューを非表示にして、ボタンをクリックしたときに表示することができます。

<View class="EsslineterActivity.maView" 
    android:id="@+id/view1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:visibility="gone" /> 

そして、あなたのコード内:あなたは同じ活動にsetContentView()を複数回呼び出す必要があれば、一般的なものに

public void bouton (View view) 
{ 
    View maView = findViewById(R.id.view1); 
    maView.setVisibility(View.VISIBLE); 
} 

は間違っています。これは、onCreate()メソッドの初めに一度だけ呼び出す必要があります。

+0

お寄せいただきありがとうございます。私はそれに応じてプログラムを修正しました。パネルには何も描かれていません。もう一つのアイデア? – user1098281

+0

ビューの高さを定義する必要があります。 layout_height属性を 'android:layout_height =" 20dp "'のような固定値に変更してみてください。ビューのサイズがわからない場合は、カスタムビューの 'onMeasure()'メソッドをオーバーライドする必要があります(それについてのチュートリアルを見つけるのは難しいはずはありません)。 – Dalmas

+0

私は試しましたが、何も変わりませんでした! – user1098281