リボンを作って指を中心にくるくるする

今回はViewの限界まで挑戦をしたいと思い、リボンでくるくる回転させてみました。

動作の滑らかさを求めるのであれば、viewよりsurfaceview,surfaceviewよりopenglといわれるのですが、viewのソースコードが割と楽しかったのでその連続で作成してみました。それと最近作った新しいサイトで少しviewを掘り下げたので、ちょっと挑戦をしてみました。

で、できたのがこれです。

まあ、見栄え的には悪くないのかな。と思います。

指を動かすとそのゆびの周りをリボンが回るように、描画していきます。リボンの速度が速くなると、リボンが太くなります。楽しいのですが、使いようがないかも。

作り方↓

マニフェスト

変更なし

レイアウト

main.xmlすらなし

メインクラス

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    DrawLine _dLine = new DrawLine(getApplicationContext());
    setContentView(_dLine);
}

描画クラス

public class DrawLine extends View {
    public int _x = 200, _y = 100;

    public float currentX1 = 200, currentY1 = -100;

    public float _xV1 = 0,_yV1 = 0;

    private Handler mHandler = new Handler();

    public DrawLine(Context context) {
        super(context);
        paint1 = new Paint();
        paint1.setColor(Color.rgb(234, 14, 50));
        paint1.setAntiAlias(true);
        paint1.setStrokeWidth(6);
        paint1.setStrokeCap(Paint.Cap.ROUND);
        Timer mTimer = new Timer();
        mTimer.schedule( new TimerTask(){
            @Override
            public void run() {
                // mHandlerを通じてUI Threadへ処理をキューイング
                mHandler.post( new Runnable() {
                    public void run() {
                        invalidate();
                    }
                });
            }
        }, 16, 16);
    }

    Bitmap _bitmap;
    Canvas _canvas;
    Paint paint1;

    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);
        _canvas.drawColor(Color.WHITE);
    }

    protected void onDraw(Canvas canvas) {

        _xV1 += (_x - currentX1)/12.0f;
        _yV1 += (_y - currentY1)/12.0f;
        _xV1 *= 0.92;
        _yV1 *= 0.92;
        currentX1 += _xV1;
        currentY1 += _yV1;
        paint1.setStrokeWidth(Math.abs(_yV1)/10.0f+Math.abs(_xV1)/10.0f);
        _canvas.drawLine((int)currentX1, (int)currentY1, (int)(currentX1-_xV1),(int)(currentY1-_yV1), paint1);

        canvas.drawBitmap(_bitmap, 0, 0, null);
    }

    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();
            break;
        case MotionEvent.ACTION_UP:
            break;
        default:
            break;
        }
        return true;
    }
}

フレームレートも30くらい出てる感じですが、もう少しあった方が気持ちよさの面でグレードアップするので残念なんですが、5分くらいはずっとくるくるしてたので、意外に面白いと自分では思っています。

以上です。

 

前後の記事

前の記事:

次の記事:

関連の記事

コメントの投稿

  • サイト内検索

新作アプリの紹介

関連サイトの紹介

アンドロイドアプリ開発TIPS
きぐるみカメラ
ふらいぱん
アンドロイドのデザイン集
Page top↑