Android
 Computer >> コンピューター >  >> プログラミング >> Android

Androidで指の動きに沿って滑らかな線を描く方法を解説

はじめに

この記事では、Androidアプリで画面をタッチし、指の動きに沿って線を描画する方法を解説します。Bitmap・Canvas・Paintという3つのグラフィックスクラスを組み合わせることで、お絵かきアプリのような機能を比較的簡単に実装できます。

ステップ1:新規プロジェクトを作成する

Android Studioを起動し、メニューから「File」→「New Project」を選択します。必要な項目をすべて入力して、新しいプロジェクトを作成しましょう。

ステップ2:レイアウトファイルを編集する

res/layout/activity_main.xml に以下のコードを追加します。ここでは、描画結果を表示するためのImageViewを配置しています。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_alignParentStart="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentTop="true"
        android:src="@drawable/ic_launcher_foreground" />
</RelativeLayout>

ステップ3:MainActivity.javaを実装する

src/MainActivity.java に以下のコードを記述します。画面サイズと同じBitmapを作成してCanvasにセットし、タッチの開始地点と終了地点を取得。指を離したタイミングで2点を結ぶ線を描画する仕組みです。

import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Display;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity implements View.OnTouchListener {
    ImageView imageView;
    Bitmap bitmap;
    Canvas canvas;
    Paint paint;
    float downX = 0, downY = 0, upX = 0, upY = 0;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imageView = this.findViewById(R.id.imageView);
        Display currentDisplay = getWindowManager().getDefaultDisplay();
        float dw = currentDisplay.getWidth();
        float dh = currentDisplay.getHeight();
        bitmap = Bitmap.createBitmap((int) dw, (int) dh,
        Bitmap.Config.ARGB_8888);
        canvas = new Canvas(bitmap);
        paint = new Paint();
        paint.setColor(Color.BLACK);
        imageView.setImageBitmap(bitmap);
        imageView.setOnTouchListener(this);
    }

    public boolean onTouch(View v, MotionEvent event) {
        int action = event.getAction();
        switch (action) {
            case MotionEvent.ACTION_DOWN:
                downX = event.getX();
                downY = event.getY();
                break;
            case MotionEvent.ACTION_MOVE:
                break;
            case MotionEvent.ACTION_UP:
                upX = event.getX();
                upY = event.getY();
                canvas.drawLine(downX, downY, upX, upY, paint);
                imageView.invalidate();
                break;
            case MotionEvent.ACTION_CANCEL:
                break;
            default:
                break;
        }
        return true;
    }
}

ステップ4:AndroidManifest.xmlを確認する

androidManifest.xml に以下のコードを追加します。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="app.com.sample">
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
</application>
</manifest>

アプリを実行してみよう

それではアプリを実行してみましょう。実機のAndroid端末をPCに接続した状態で、Android Studioでプロジェクトのアクティビティファイルを開き、ツールバーの「Run」アイコンをクリックします。実行デバイスとして自分のスマートフォンを選択すると、端末に以下のような画面が表示されます。

Androidで指の動きに沿って滑らかな線を描く方法を解説

より滑らかな線を描くためのポイント

上記のサンプルコードでは、指を画面から離した瞬間(ACTION_UP)に、押し始めた地点から離した地点までの直線を1本描画する仕組みになっています。

指の動きにリアルタイムで追従させたい場合は、ACTION_MOVE イベントが発生するたびに「前回の座標から現在の座標へ」線を引き続ける方法が有効です。さらに、Pathクラスの quadTo() を使えば、各点を滑らかに結ぶ曲線を描くこともできます。お絵かきアプリや署名入力機能などを実装したい場合は、ぜひ試してみてください。

  1. 【Python】tkinterでマウスのクリック座標に沿って線を描画する方法

    マウスの座標に沿って線を引くには、マウスがクリックされるたびにその座標を取得する関数を作成し、連続する2点間に線を描画する仕組みが必要です。ここでは、実際のコード例を使いながら、その実装方法をわかりやすく解説します。 実装の手順 tkinterライブラリをインポートし、tkinterフレーム(ウィンドウ)のインスタンスを作成します。 geometryメソッドを使って、ウィンドウのサイズを設定します。 ユーザー定義メソッド「draw_line」を作成し、マウスがクリックされるたびにx座標とy座標を取得します。そして、Canvasのcreate_line()メソッドを使用して、直前の点と現在の点

  2. Tkinterのキャンバスに線を描画する方法【create_lineメソッドの使い方】

    TkinterのCanvas(キャンバス)ウィジェットは、図形やオブジェクトの描画、グラフィックや画像の作成など、さまざまな用途に活用できる便利なウィジェットです。キャンバス上に線を引きたい場合は、create_line(x, y, x1, y1, **options) メソッドを使用します。このメソッドでは、始点の座標 (x, y) と終点の座標 (x1, y1) を指定することで、自由に線を描くことができます。線の種類:実線と破線Tkinterで描ける線には、主に「実線」と「破線」の2種類があります。どちらのスタイルにするかは、dash プロパティを使って指定できます。また、fill オプ