• 締切済み
  • 困ってます

[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); } }

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数337
  • ありがとう数0

みんなの回答

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

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

共感・感謝の気持ちを伝えよう!

質問者からの補足

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

関連する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アプリを開発しているのですが、 エミュレータ、実機ともに実行するとプログラムが反映されておりません。 以下のソースを実行すると、 「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); } }

  • 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
  • 回答No.1
  • nag0720
  • ベストアンサー率58% (1093/1860)

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); } }

共感・感謝の気持ちを伝えよう!

質問者からの補足

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

関連するQ&A

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

    画像の位置指定の数字を変えても、位置が変わりません! 何がいけないのでしょうか? 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 R.color

    「values/colors.xml」内に「<color name="orange">#ffa500</color>」とか設定して、プログラムから下記みたいな感じで取得しようとするとエラーになってしまいます。 プログラムからリソースのカラーの値を取得する方法を ご存知の方が いらっしゃいましたら ご教授下さいm(_ _)m &#65374; import android.graphics.Color; &#65374; public class MainActivity extends AppCompatActivity { &#65374; int c = Color.parseColor(getString(R.color.orange)); &#65374;

  • package com.rensyu;コメントを入れて欲しいのですが…

    package com.rensyu;コメントを入れて欲しいのですが… import java.util.Calendar; import android.app.Activity; 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.os.Bundle; import android.util.Log; import android.view.SurfaceHolder; import android.view.SurfaceView; public class rensyu extends Activity { Thread drawThread; class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback { Bitmap osb; Canvas osc; public MySurfaceView(Context context) { super(context); getHolder().addCallback(this); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { Log.d("TEST", "surfaceChanged"); } @Override public void surfaceCreated(final SurfaceHolder holder) { Log.d("TEST", "surfaceCreated"); final Paint paint = new Paint(); paint.setColor(Color.RED); paint.setAntiAlias(true); paint.setTextSize(24); final Bitmap bitmap = BitmapFactory.decodeResource(getContext().getResources(), R.drawable.icon); drawThread = new Thread() { public void run() { try { while (true) { Canvas canvas = holder.lockCanvas(); if (osb == null) { osb = Bitmap.createBitmap(canvas.getWidth(), canvas.getHeight(), Bitmap.Config.RGB_565); osc = new Canvas(osb); } osc.drawColor(Color.WHITE); Calendar cal = Calendar.getInstance(); String s = String.format("%02d:%02d:%02d.%03d", cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND), cal.get(Calendar.MILLISECOND)); osc.drawText(s, 0, paint.getTextSize(), paint); osc.drawBitmap(bitmap, 0, paint.getTextSize(), null); canvas.drawBitmap(osb, 0, 0, null); holder.unlockCanvasAndPost(canvas); Thread.sleep(10); } } catch (Exception e) { } } }; drawThread.start(); } @Override public void surfaceDestroyed(SurfaceHolder holder) { Log.d("TEST", "surfaceDestroyed"); } }

    • ベストアンサー
    • Java
  • AndroidにおけるSQLiteの使い方について

    Android Studioで、Androidのアプリを開発しています。 SQLiteを使おうとすると、 クエリを送るタイミングでアプリケーションが停止してしまいます。 何が悪いんでしょうか。 以下の様なソースコードで停止しました。 #MyDbOpenHelper.java package com.example.test10; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; /** * Created by taiki on 13/06/16. */ public class MyDbOpenHelper extends SQLiteOpenHelper { private static final int DATABASE_VERSION = 2; private static final String DATABASE_NAME = "board"; private static final String THREAD_TABLE_NAME = "thread"; private static final String THREAD_TABLE_COLUMN1 = "column1"; private static final String THREAD_TABLE_CREATE = "CREATE TABLE " + THREAD_TABLE_NAME + " (" + THREAD_TABLE_COLUMN1 + " text;"; MyDbOpenHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(THREAD_TABLE_CREATE); } @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i2) { } } #MainActivity.java package com.example.test10; import android.database.sqlite.SQLiteDatabase; 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); MyDbOpenHelper dbHelper; dbHelper = new MyDbOpenHelper(MainActivity.this); SQLiteDatabase db = dbHelper.getReadableDatabase(); db.execSQL("CREATE TABLE thread (threadNumber integer primary key autoincrement,mainText TEXT, createDate date);"); } @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; } }

  • 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 PhoneGap WebSetti

    メソッド setDefaultZoom(WebSettings.ZoomDensity) は型 WebSettings で使用すべきではありません という警告がEclipseで出ます。 以下のソースの最後の行が警告の対象です。 適切な対応を行いたいのですが、どのようにするとよいでしようか? android:targetSdkVersion="19" とするとこの警告はでなくなりますが、いつかは19のようにバージョンを上げることになると思うので、今から既に19で進めていきたいです。 // AndroidManifest.xml <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="19" /> // MainActivity.java public class MainActivity extends DroidGap { @Override public void onCreate(Bundle b) {    super.onCreate(b);    ・・・    settings.setDefaultZoom(ZoomDensity.MEDIUM);

    • ベストアンサー
    • Java
  • androidの円(circle)を連続で出したい

    android初心者です。 androidの円(circle)を連続で出したいソースを作成していますがうまくいきません。 現在のソースではランダムで座標を取得することは出来ますが表示されません。 for文for(i=0;i<100;i++)で作成してみましたが、100回終わるまで円が表示されません。 以下が自分で作成してみたソースです。 どなたか詳しい方教えてください。 public class Balltataki extends Activity { int ran_width; int ran_height; Paint paint; boolean running=true; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); getWindow().setFormat(PixelFormat.TRANSLUCENT); setContentView(new BallView(this)); class BallView extends View { int flag=1; public BallView(Context context) { super(context); } @Override protected void onDraw(Canvas canvas) { while(running==true){ ran_width = (int)(Math.random()*getWidth()); ran_height = (int)(Math.random()*getHeight()); Log.i("tag","ran_w:"+ran_width); Log.i("tag","ran_h:"+ran_height); paint=new Paint(); paint.setAntiAlias(true); paint.setStrokeWidth(1); paint.setStyle(Paint.Style.FILL); paint.setColor(Color.argb(255, 255, 255, 255)); canvas.drawCircle(ran_width,ran_height,60,paint); try { Thread.sleep(100); } catch (Exception e) {} } } } }

  • android開発 map コンテナのエラー

    今学校でandroid開発の課題が出ているのですが、エラーの原因が分かりません。 javaの勉強はしていますが、android開発は初めてです。 http://note.chiebukuro.yahoo.co.jp/detail/n237584 上のURLのmapを作成しているのですが、MainActivity.javaでエラーが検出されました。 public class MainActivity extends FragmentActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (savedInstanceState == null) { getSupportFragmentManager().beginTransaction() .add(R.id.container, new PlaceholderFragment()) .commit(); } } ・ ・ ・ 上のcontainerでエラーとなりました。どうしたらエラーがなくなるのか教えてください。

  • アンドロイド MainActivity.java

    アンドロイド(JAVA)でアプリを開発してます。 いくつかの画面が存在して、ある程度、動作するようになってるのですが、 MainActivity.javaというファイルがプロジェクト内に存在しません。 いろいろとやりたい事調べてると、MainActivity.javaというのが出てくるのですが MainActivity.javaというファイルは別になくても支障はないのでしょうか? 今、構成上Activityはいくつかあり、AndroidMainFest.xmlというファイルで Activityの設定などをしてます。 MainActivity.javaというのは、何か特別な動きをするファイルなのでしょうか? なくても問題なしでしょうか? 以上、素人質問かも知れませんが、よろしくお願いします。