• 締切済み

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

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

みんなの回答

noname#147388
noname#147388
回答No.1

描画処理を別スレッドにして動作させてください。 そうすることによって 円2が描画中でも円1が描画がおわれば円1が表示されます。

関連するQ&A

  • Androidアプリ実行エラー2

    Androidアプリ実行エラー ソースはこちらです。 package com.example.sudoku; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Rect; import android.graphics.Paint.FontMetrics; import android.graphics.Paint.Style; import android.util.Log; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; import android.view.animation.AnimationUtils; public class PuzzleView extends View { private static final String TAG = "Sudoku"; private float width; private float height; private int selX; private int selY; private final Rect selRect = new Rect(); private final Game game; public PuzzleView(Context context) { super(context); this.game = (Game) context; setFocusable(true); setFocusableInTouchMode(true); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { width = w / 9f; height = h / 9f; getRect(selX, selY, selRect); Log.d(TAG, "onSizeChanged: width " + width + ", height" + height); super.onSizeChanged(w, h, oldw, oldh); } @Override protected void onDraw(Canvas canvas) { //背景色の描画 Paint background = new Paint(); background.setColor(getResources().getColor( R.color.puzzle_background)); canvas.drawRect(0, 0, getWidth(), getHeight(), background); //盤面を描画する //枠線の色を定義する Paint dark = new Paint(); dark.setColor(getResources().getColor(R.color.puzzle_dark)); Paint hilite = new Paint(); hilite.setColor(getResources().getColor(R.color.puzzle_hilite)); Paint light = new Paint(); light.setColor(getResources().getColor(R.color.puzzle_light)); //マス目を区切る線 for (int i = 0; i < 9; i++) { canvas.drawLine(0, i * height, getWidth(), i * height, light); canvas.drawLine(0, i * height + 1, getWidth(), i * height + 1, hilite); canvas.drawLine(i * width, 0, i * width, getHeight(), light); canvas.drawLine(i * width + 1, 0, i * width + 1, getHeight(), hilite); } //3*3を区切る線 for (int i = 0; i < 9; i++) { if(i % 3 != 0) continue; canvas.drawLine(0, i * height, getWidth(), i * height, dark); canvas.drawLine(0, i * height + 1, getWidth(), i * height + 1, hilite); canvas.drawLine(i * width, 0, i * width, getHeight(), dark); canvas.drawLine(i * width + 1, 0, i * width + 1, getHeight(), hilite); } //数値を描画する Paint foreground = new Paint(Paint.ANTI_ALIAS_FLAG); foreground.setColor(getResources().getColor(R.color.puzzle_foreground)); foreground.setStyle(Style.FILL); foreground.setTextSize(height * 0.75f); foreground.setTextScaleX(width / height); foreground.setTextAlign(Paint.Align.CENTER); //マスの中央に数字を描く FontMetrics fm = foreground.getFontMetrics(); //x軸方向でセンタリングする。中央のx座標に揃える float x = width / 2; // float y = height / 2 - (fm.ascent + fm.descent) / 2; for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { canvas.drawText(this.game.getTileString(i, j),i * width + x, j * height + y, foreground); } } //ヒントを描画する //選択されたマスを描画する } private void getRect(int x, int y, Rect rect) { rect.set((int) (x * width), (int) (y * height), (int) (x * width + width), (int) (y * height + height)); } } ログはこちらです。 ご回答をよろしくお願いします。 http://okwave.jp/qa/q8272113.html

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

  • アンドロイド 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
  • Appletのrepaint()が動作しません

    import java.applet.*; import java.awt.*; /*<applet code="zxy" width="1000" height="1000"></applet>*/ class Object extends Applet { protected int x; /* オブジェクトのx座標 */ protected int y; /* オブジェクトのy座標 */ protected int width; protected int height; Image buffer; Graphics buffer_g; Dimension d = getSize(); public Object() { x = 0; y = 0; width = 0; height = 0; } } /* 楕円クラス */ class Oval extends Object implements Runnable { public Oval() { width = (int)(Math.random() * 56 + 10); height = (int)(Math.random() * 56 + 10); } public void run() { while( true ){ try{ repaint(); Thread.sleep(50); } catch( Exception e ){} } } public void paint( Graphics g ) { if( buffer_g == null ) buffer_g = buffer.getGraphics(); Dimension d = getSize(); buffer_g.setColor( Color.white ); buffer_g.fillRect( 0, 0, d.width, d.height ); buffer_g.setColor( Color.black ); buffer_g.drawOval( x, y, width, height ); x += (int)(Math.random() * 10); y += (int)(Math.random() * 10); g.drawImage( buffer, 0, 0, this ); } } public class A extends Applet { Image buffer; Graphics buffer_g; Oval ov1 = new Oval(); Thread thOv1 = new Thread( ov1 ); public void start() { thOv1.start(); Dimension d = getSize(); buffer = createImage( d.width, d.height ); } } 上記プログラムを実行しても、paint()の中が実行されずにtryブロックを繰り返すだけになってしまいます。paint()を実行するにはどうすればいいでしょうか?

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

  • 意味がわかりません。

    2から902の中で乱数を10個ranに格納し、それをi=0からi+=ran表示するというプログラムを作成しました。下のプログラムはその1部なのですが、意味のわからない部分があり困っています。ranには得られた10個の乱数のうちの1つの数字が格納されますよね。10個取得したとはどういった処理がされるのでしょうか? public void paint(Graphics g){ int w,h; w = (int)getSize().width; h = (int)getSize().height; bufferGraphics.drawImage(image,0,0,this); bufferGraphics.setColor(Color.black); int rand; //2から902の中で乱数を10個ranに格納 for(int j=0; j<10; j++){ int ran = (int)(Math.random() * 1000)+2; for(int i=0;i<h;i+=ran){ bufferGraphics.drawLine(0,i,w,i); } g.drawImage(buffer,0,0,null); } }

    • ベストアンサー
    • Java
  • ファイル出力

    下記のプログラムはランダムな黒い円を10個描くプログラムです。描かれた円の大きさ(wの値)を知りたいのでwの値を1つづつテキストファイルに出力するようにしたいのです。宜しくお願いします。 import ij.*; import ij.process.*; import ij.gui.*; import java.awt.*; import java.util.Random; import ij.plugin.*; public class Random_1 implements PlugIn { public void run(String arg) { IJ.run("New...", "name='Random 1' type='32-bit RGB' width=256 height=256"); drawOvals(); } void drawOvals() { ImagePlus imp = WindowManager.getCurrentImage(); Random ran = new Random(); int width = imp.getWidth(); int height = imp.getHeight(); for (int i=0; i<500; i++) { int w = (int)(ran.nextDouble()*width/16+1); int h = w; int x = (int)(ran.nextDouble()*width-w/2); int y = (int)(ran.nextDouble()*height-h/2); IJ.setForegroundColor((int)(0), (int)(0), (int)(0)); IJ.makeOval(x, y, w, h); IJ.run("Fill"); } } }

  • 改良したいのですが

    画面上に表示している静止画像(img)の上に、ランダムに黒色のライン(buffer)を数本表示するというプログラムを作成しました。次はそのプログラムの一部なのですが、静止画像の上に表示している線を、黒色ではなく、静止画像の輝度情報が半分(50%)になっている線(画質が劣化している線)を表示させるように改良したいのですが、どこを変えたらいいのか、どのように変えたらいいのかわかりません。わかる方いましたら、アドバイス等お願いします。多分setColorの部分を変えると思うのですが・・・(^^; public void paint(Graphics g){ int w,h; w = (int)getSize().width; h = (int)getSize().height; bufferGraphics.drawImage(img,0,0,this); bufferGraphics.setColor(Color.black); //処理を10回繰り返す for(int j=0; j<10; j++){ //2から1002の中で乱数を1つranに取得 int ran = (int)(Math.random() * 1000)+2; for(int i=0;i<h;i+=ran){ //ranの値にしたがって画面上にラインを表示 bufferGraphics.drawLine(0,i,w,i); } g.drawImage(buffer,0,0,null); } } public void update(Graphics g){ paint(g); } public void run(){ while( true ){ try{ Thread.sleep(10); } catch(InterruptedException e){ } } } public void start(){ thread = new Thread(this); thread.start(); } }

    • ベストアンサー
    • Java
  • Android 60秒を1分表示にしたい

    Android勉強中なのです。 あるゲームを作っていて時間表示をしているのですが、○分○秒と表示するソースの打ち方が分かりません。どなたか、分かる方ご教授お願いいたします。 <ソース> class MosView extends View { public int dispX = 480; public int dispY = 640; private int frame = 0; ←ここで時間を数えていきます。 private int score = 0; private int MosesSpeed = 4; <中略> <ソース:ここが表示するソースです> // Message の描画 Paint paint = new Paint(); paint.setColor(Color.GRAY); String msg = "Score:" + score + ", Mosqutos:" + (Mosess.size()) + ", Time:" + (frame++); ← ここで1ずつ足していき、表示しています。 paint.setTextSize(24); canvas.drawText(msg, 2, 30, 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

専門家に質問してみよう