• 締切済み

[android]画面に円が表示されない原因

こんにちは。 以下のサイトを参考に白い画面に赤い円を表示させたいのですが、実際にはエミュレータ上に表示されません。 logcatのエラーもありません。原因と対処方法をご教授ください。 eclipseのバージョンは以下のとおりです。 Eclipse Platform 3.8.0.v20120607-071945-9gF7jI7nG5qByXMVdkhRMWBQlF4PnDCLybDCPQ http://www.hakkaku.net/articles/20091127-594 ★MainActivity.java package com.example.test001_001; import android.os.Bundle; import android.app.Activity; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.view.Menu; import android.view.View; public class MainActivity extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 描画クラスを設定 setContentView(new TestDrawView(getApplication())); } /* 描画用クラス */ class TestDrawView extends View { public TestDrawView(Context c) { super(c); } } // このメソッドで描画を行う protected void onDraw(Canvas c) { // --------- (*1)Check!! c.drawColor(Color.WHITE); Paint p = new Paint(); p.setColor(Color.RED); p.setStyle(Paint.Style.FILL); c.drawCircle(100, 100, 50, p); } }

  • Java
  • 回答数2
  • ありがとう数0

みんなの回答

  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.2

>Caused by: java.lang.InstantiationException: これは、オブジェクトのインスタンスを生成できないときに出るエラーです。 原因ははっきりとは分かりませんが、エミュレータの設定の問題かもしれないし、メモリー不足になったかもしれません。 コード自体は問題ありません。実際にこのコードを実装してエミュレータで実行してみましたが問題ありませんでした。 参考にされたサイトには文字を表示するプログラムもありますが、それはうまくいったんでしょうか?

kwgchrtk
質問者

補足

ご回答ありがとうございます。 以下のことは成功しています。 ・文字の表示(イタリック、文字の大きさ、色、位置の変更、背景に色をつける) ・クリックしても状態が変化しないボタンの表示 ・整数型のデータを単精度浮動小数点型に変換して表示、その逆 現在のところ、以下のことには失敗しています。(スキル不足かもしれませんが) ・図形の描画 ・ボタンをクリックすると画面の状態が変わる、他の画面に切り替わる adt-bundle-windows-x86_64.zipをインストールしたらできないという報告はどのサイトにもないようですが、どうしたらよいのでしょうか。 もし、再インストールの必要があれば、これまでのデータのバックアップと再インストール後のファイルの読み込み方もご教授ください。 宜しくお願い致します。

  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.1

OnDrawはTestDrawViewクラスの中です。 /* 描画用クラス */ class TestDrawView extends View { public TestDrawView(Context c) { super(c); } // このメソッドで描画を行う protected void onDraw(Canvas c) { // --------- (*1)Check!! c.drawColor(Color.WHITE); Paint p = new Paint(); p.setColor(Color.RED); p.setStyle(Paint.Style.FILL); c.drawCircle(100, 100, 50, p); } }

kwgchrtk
質問者

補足

ご回答ありがとうございます。 「// このメソッドで描画を行う」の前の}が1つ多かったんですね。 お恥ずかしい話ですが、ここで問題が発生しました。 Caused by: java.lang.InstantiationException: com.example.test001_001.MainActivity Viewクラスを理解していないんだと思います。対処方法をご教授ください。宜しくお願い致します。

関連するQ&A

  • アンドロイド JAVA 警告

    アンドロイド 初心者です package com.example.test; import android.os.Bundle; import android.app.Activity; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.view.View; public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(new testView(this)); } class testView extends View { public testView(Context context) { super(context); } @Override protected void onDraw(Canvas canvas) { Paint paint = new Paint(); paint.setColor(Color.RED); canvas.drawLine(0, 0, 100, 50, paint); } } } このプラグラムで"Paint paint = new Paint();"のところで "Avoid object allocations during draw/layout operations (preallocate and reuse instead)" の警告が出ます、これを取る方法はありませんか。

    • ベストアンサー
    • Java
  • Android用ゲームを作っています。

    現在Androidゲームを作っているのですが、現在時間を取得し、時刻を表示したり、背景画像などを変えたりしたいのですがどのように取得し、表示させればいいのでしょうか?ソースコードは ・MainActivity.java package andorid.eample.game2; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.os.Bundle; import android.app.Activity; import android.widget.LinearLayout; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout l = new LinearLayout(this); setContentView(l); l.addView(new PView(this, null, 0)); } } ・PView.java package andorid.eample.game2; import android.annotation.SuppressLint;4 import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import android.widget.TextView; import android.widget.Toast; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Random; import android.content.res.Resources; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.text.format.Time; import android.media.MediaPlayer; public class PView extends View{ Paint paint = new Paint(); Date date = new Date(); int flg = 0; int charaX =250; int charaY = 250; Resources res = this.getContext().getResources(); Bitmap bg = BitmapFactory.decodeResource(res, R.drawable.bg1); Bitmap chara = BitmapFactory.decodeResource(res, R.drawable.charan); Bitmap charaT = BitmapFactory.decodeResource(res, R.drawable.charat); Bitmap box= BitmapFactory.decodeResource(res, R.drawable.boxt); //音楽読み込み MediaPlayer se = MediaPlayer.create(getContext(),R.raw.ehehe); public PView(Context context,AttributeSet attrs,int defStyle) { super(context,attrs); // TODO 自動生成されたコンストラクター・スタブ } @SuppressLint("DrawAllocation") @Override protected void onDraw(Canvas c){ c.drawBitmap(bg,0,100,paint); if(flg == 0) { c.drawBitmap(chara,charaX,charaY,paint); } if(flg == 1) { c.drawBitmap(charaT,charaX,charaY,paint); c.drawBitmap(box,50,200,paint); } invalidate(); } public boolean onTouchEvent(MotionEvent me) { //タッチされた時 if(me.getAction() == MotionEvent.ACTION_DOWN) { if(me.getAction() == MotionEvent.ACTION_DOWN) { if(flg == 0) { flg = 1; se.start(); } else{ flg =0; } } } return false; } } このような感じになっています どうかアドバイスをお願いします。

    • ベストアンサー
    • Java
  • Androidアプリ開発

    Androidアプリを開発しているのですが、 エミュレータ、実機ともに実行するとプログラムが反映されておりません。 以下のソースを実行すると、 「Hello World!」のみ表示されます。 原因がわからないので、ご教授願えませんでしょうか。 【ソース】 package sib.stringex; import android.app.Activity; import android.os.Bundle; import android.view.Window; public class StringEx extends Activity{ @Override public void onCreate(Bundle bundle){ super.onCreate(bundle); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(new StringView(this)); } } package sib.stringex; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.view.View; public class StringView extends View { public StringView(Context context){ super(context); setBackgroundColor(Color.WHITE); } @Override protected void onDraw(Canvas canvas){ Paint paint= new Paint(); paint.setAntiAlias(true); paint.setTextSize(24); paint.setColor(Color.rgb(0, 0, 0)); canvas.drawText("画面サイズ:"+ getWidth()+ "X"+getHeight(), 0, 60, paint); canvas.drawText("文字幅:"+(int)paint.measureText("A"), 0, 60*2, paint); canvas.drawText("アセント"+(int)paint.ascent(), 0, 60*3, paint); canvas.drawText("ディセント"+(int)paint.descent(), 0, 60*4, paint); paint.setTextSize(24); paint.setColor(Color.rgb(255, 0, 0)); canvas.drawText("24dot", 0, 60*5, paint); paint.setTextSize(32); paint.setColor(Color.rgb(0, 255, 0)); canvas.drawText("32dot", 0, 60*6, paint); paint.setTextSize(48); paint.setColor(Color.rgb(0, 0, 255)); canvas.drawText("32dot", 0, 60*7, paint); } }

  • 画像の位置指定の数字を変えても、位置が変わりません! 何がいけないので

    画像の位置指定の数字を変えても、位置が変わりません! 何がいけないのでしょうか? package com.cute.yukari; import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Paint; import android.os.Bundle; import android.view.View; public class cutecreate extends Activity { private SampleView mView; private Bitmap mBitmap; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.yukari1 ); mView = new SampleView(this); setContentView(mView); } private class SampleView extends View { private Paint mPaint; private float imageX = 0f; private float imageY = 0f; public SampleView(Context context) { super(context); mPaint = new Paint(); } @Override protected void onDraw(Canvas canvas) { //画像表示 canvas.drawBitmap(mBitmap, imageX - mBitmap.getWidth() / 50, ←ここの数字を変えても25以降位置が変わりません。 imageY - mBitmap.getHeight() / 50, ←25より少なくすると多少は移動するのですが… mPaint); } } }

    • ベストアンサー
    • Java
  • 現在AndroidSDKにてゲームを製作して

    いるのですが、ゲーム画面は出来ているのですが、ゲームスタート画面、ゲームオーバー画面を作りたいのですがどうすればよろしいのでしょうか、スタート画面はタッチされたらゲーム画面に切り替わるようにしたいです。 ソースは メインアクティビティーは package android.game; import android.os.Bundle; import android.app.Activity; import android.widget.LinearLayout; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout l = new LinearLayout(this); setContentView(l); l.addView(new textview(this, null, 0)); l.addView(new PView(this, null, 0)); } } で、ゲーム画面のクラスは package android.game; import android.annotation.SuppressLint; import android.content.Context; import android.game.R.id; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import android.widget.TextView; import android.widget.Toast; import java.util.Random; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Paint; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import java.util.Random; public class PView extends View{ Paint paint = new Paint(); int player = 0; int playerV = 20; int tamaV = 20; int x = 100; int y = 50; int tamaY = player; int tamaX = player; int line = 550; int tama2X = 0; int tama2Y = 0; int linex = 400; int cnt = 0; int score = 0; int timerT = 30; int flg = 0; int stx = 200; int sty = 200; Random rand = new Random(); Resources res = this.getContext().getResources(); Bitmap bg = BitmapFactory.decodeResource(res, R.drawable.haikei); Bitmap pl = BitmapFactory.decodeResource(res, R.drawable.player); Bitmap tama = BitmapFactory.decodeResource(res, R.drawable.tama); Bitmap tama2 = BitmapFactory.decodeResource(res, R.drawable.tama2); Bitmap lineview = BitmapFactory.decodeResource(res, R.drawable.line); Bitmap lineview2 = BitmapFactory.decodeResource(res, R.drawable.line2); public PView(Context context,AttributeSet attrs,int defStyle) { super(context,attrs); // TODO 自動生成されたコンストラクター・スタブ } @SuppressLint("DrawAllocation") @Override protected void onDraw(Canvas c){ timerT--; if(timerT < 0) { timerT = 0; } player += playerV; if(player<0 || 400<player) playerV *= -1; //弾の処理 tamaY+= 0; tama2Y += 20; if(tamaY > getHeight()) { tamaY = rand.nextInt(500)+1; } tamaX = rand.nextInt(30); tama2Y += 20; if(tama2Y > getHeight()) { tama2Y = rand.nextInt(500)+1; } tama2X = rand.nextInt(100); c.drawBitmap(bg,0,0,paint); c.drawBitmap(pl,player,y, paint); c.drawBitmap(tama,player,tamaY,paint); c.drawBitmap(tama2,tama2X,tama2Y, paint); c.drawBitmap(lineview,0,line,paint); c.drawBitmap(lineview2,0,linex, paint); invalidate(); } public boolean onTouchEvent(MotionEvent me) { //タッチされた時 if(me.getAction() == MotionEvent.ACTION_DOWN) stx = 0; { if(me.getAction() == MotionEvent.ACTION_DOWN) { if(tamaY >= line && tamaY < line + 40) { tamaY = 0; score+= 10; } } if(me.getAction() == MotionEvent.ACTION_DOWN){ if(tama2Y >= linex && tama2Y < linex + 50) { tama2Y = 0; score+= 20; } } return true; } } } このようになっています。 よろしくお願いします

  • android inflateメソッドについて

    eclipseから「新規アプリケーション・プロジェクト」でプロジェクトを作成すると下記のコードが自動作成されます。 package com.example.hello; import android.os.Bundle; import android.app.Activity; import android.view.Menu; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } } この中で、inflateメソッドにカーソルを当てると  void android.view.MenuInflater.inflate(int menuRes, Menu menu) が表示されるので、MenuInflaterクラスのメソッドだと確認できます。 しかし、import文でMenuInflaterクラスを定義していないのになぜ使用できるのでしょうか。

  • androidのアプリを作ってるんですが

    import android.os.Bundle; import android.app.Activity; import android.util.Log; import android.view.Menu; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.widget.TextView; import android.content.Intent; import android.widget.ImageView; public class GameActivity extends Activity implements OnTouchListener{ private ImageView target; @Override protected void onCreate(Bundle savedInstanceState) { target = (ImageView)findViewById(R.id.imageView1); super.onCreate(savedInstanceState); setContentView(R.layout.activity_game); target.setOnTouchListener(this); } @Override public boolean onTouch(View v, MotionEvent motion) { switch(motion.getAction()) { case MotionEvent.ACTION_DOWN: break; case MotionEvent.ACTION_UP: break; } return true; } } これからゲーム本体を作っていこうとしてるんですが、onTouchメソッドを実装してから実機で動作しなくなり、先に進めず困っています。なぜこれで動作しないのか私の知識不足でよくわかりません。 回答お願いいたします。

    • ベストアンサー
    • Java
  • Androidプログラミング アプリが停止する

    eclipseでボタンを押すと画像が表示されるアプリをつくろうとしていましたがボタンをを押すとポップアップで「~を停止します。」と表示されアプリが落ちてしまいます。 Ver4.0を使用しています。 package my.application.imageviewer; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.ImageView; public class ImageViewer extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } public void showImage(View view) { ImageView imageView1 = (ImageView)findViewById(R.id.imageView1); imageView1.setImageResource(R.drawable.sample); } } プログラムにミスがあるのでしょうか? 宜しくお願い致します。

  • Androidで画面遷移ができません.

    初心者ながら,Android向けにアプリを開発しています. ページXXXXXでボタンを表示させ,ページYYYYYで画像が表示されるようにしたいのですが,ページXXXXXで表示されたボタンを押すとエラーが出て強制終了となってしまいます. 画面遷移されるページ(YYYYY)には,適当な位置にタッチさせるとタッチした位置に移動する画像についてプログラミングしてあります.ページYYYYYは個別で実行すると正常に起動します. どこに原因があるのか教えてください.よろしくお願いします. ページXXXXXのソースは以下のとおりです. 【ソース】 import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.content.Intent; public class XXXXX extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button b1 = (Button) findViewById(R.id.button1); b1.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { Intent intent = new Intent(XXXXX.this, YYYYY.class); startActivity(intent); } }); } }

    • ベストアンサー
    • Java
  • androidのオプションメニューについて

    androidアプリの作り方を勉強しているのですが、オプションメニューを実装しようと思いonCreateOptionMenuを書いたのですが、エミュレータでメニューボタンを押してもメニューが現れません。onCreateOptionMenu内でTextViewの文字を変更するようにしたのでが、TextViewは変更されず、そもそもonCreateOptionMenuがスルーされているようです。だれか、わかる方がいたらご教授お願いします。 以下ソースです。 シンプルにしたのですが問題がわかりません。 import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuInflater; public class Test04Activity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } public boolean onCreateOptionMenu(Menu menu){ super.onCreateOptionsMenu(menu); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu, menu); return true; } }