今回のアプリは頑張ればアプリ化に到達できそうな、予感もありつつ、考え付かないので、書いてしまいます。
描画をするにはやはり、Viewを使うのがお手軽感があります。
↑こんなの作ります。
点で書くの難しいなぁ。と思いながらも、スクリプトは簡単でした。
マニフェストは
特に変更しません。
レイアウトは
直接viewを表示します。
描画用viewは小さすぎる円と大きすぎる円はしきい値を引いたのがポイントでしょうか。
public class TouchCircle extends View { public int _x = 200, _y = -100; public int _xOld = 200, _yOld = -100; public float currentX = 200, currentY = -100; public float _xV = 0,_yV = 0; public TouchCircle(Context context) { super(context); } Bitmap _bitmap; Canvas _canvas; protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); _bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_4444); _canvas = new Canvas(_bitmap); } int _count = 0; protected void onDraw(Canvas canvas) { _count++; Paint paint = new Paint(); int _ran = (int)(Math.random()*200); paint.setColor(Color.rgb(255, (int)(_ran+(255-_ran)/8*Math.random()), (int)(_ran+(255-_ran)/8*Math.random()))); paint.setAntiAlias(true); int _size = (int) Math.sqrt((_x - _xOld)*(_x - _xOld)+(_y - _yOld)*(_y - _yOld)); _size /= 2; if(_size<5){ _canvas.drawCircle((int)(_x+20-40*Math.random()), (int)(_y+20-40*Math.random()), 5, paint); }else if(_size<50){ _canvas.drawCircle((int)(_x+20-40*Math.random()), (int)(_y+20-40*Math.random()), _size, paint); }else{ _canvas.drawCircle((int)(_x+20-40*Math.random()), (int)(_y+20-40*Math.random()), 10, paint); } canvas.drawBitmap(_bitmap, 0, 0, null); _xOld = _x; _yOld = _y; } public boolean onTouchEvent(MotionEvent e) { switch (e.getAction()) { case MotionEvent.ACTION_DOWN: _x = (int) e.getX(); _y = (int) e.getY(); break; case MotionEvent.ACTION_MOVE: _x = (int) e.getX(); _y = (int) e.getY(); invalidate(); break; case MotionEvent.ACTION_UP: break; default: break; } return true; } }
メインのクラスから描画クラスを呼び出します。
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TouchCircle _tCircle = new TouchCircle(getApplicationContext()); setContentView(_tCircle); }
はいできた!