Android カスタム ビューを使用してシェイプ グラフィックス描画を実装する方法を説明します。

Y2J
リリース: 2017-04-22 09:54:37
オリジナル
2770 人が閲覧しました

この記事では、Android がカスタム View を使用してシェイプ グラフィック描画を実装する方法を主に詳しく紹介します。興味のある方は参考にしてください。

概要

Android の Drawables が Shape リソースを使用する前に記事を書きました。ドローアブルで形状リソースを定義することにより、長方形、楕円、線、リングなどの単純なグラフィック効果を描画できます。その後、プロジェクトで偶然、特定の位置に縦の点線を表示するという要件に遭遇しました。上記のリソース ファイルを自信を持って挿入したところ、それが要件を満たしていないことがわかりました。シェイプを使用して描かれた垂直の点線は、実際には 90 度回転された水平線です。ただし、ビューの有効領域が90度回転後の元の位置と一致する領域となり、自由に変更することができないという欠点があります。この効果は一切使用できません。そこで、カスタム ビューを使用して必要な結果を描画することを考えました。

1. 水平の点線を描画します

コードは次のとおりです:

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.DashPathEffect;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;

public class CustView extends View{

  private Paint mPaint; //定义画笔

  public CustView(Context context, AttributeSet attrs) {
    super(context, attrs);

    //初始化画笔
    initPaint();
    setLayerType(View.LAYER_TYPE_SOFTWARE, mPaint); //4.0以上关闭硬件加速,否则虚线不显示
  }

  private void initPaint() {
    mPaint = new Paint();
    mPaint.setAntiAlias(true); //设置抗锯齿的效果
    mPaint.setStyle(Paint.Style.STROKE); //设置画笔样式为描边
    mPaint.setStrokeWidth(3); //设置笔刷的粗细度
    mPaint.setColor(Color.RED); //设置画笔的颜色
    mPaint.setPathEffect(new DashPathEffect(new float[]{5,5,5,5}, 1)); //设置画笔的路径效果为虚线效果
  }

  @Override
  protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    canvas.drawLine(0, 0, 100, 0, mPaint);
  }
}
ログイン後にコピー

レイアウト ファイルは次のように引用されています:

<com.test.CustView
  android:layout_width="100dp"
  android:layout_height="10dp"
  android:layout_marginTop="10dp" />
ログイン後にコピー

注: カスタム View のコードでは、drawLine メソッドが onDraw で実行されます。メソッドの完全な名前は次のとおりです:

public voiddrawLine (float startX, float startY, float stopX, float stopY, Paint Paint)

startX: 開始端点 x 座標
startY: 開始端点 y 座標
stopX:終了エンドポイントの x 座標
stopY : 終了エンドポイントの y 座標

上記の 4 つの左の値はすべて相対位置で計算されます。つまり、左側にコントロールがない場合は、左側のコントロールを基準に計算されます。 、携帯電話画面の左端の相対位置が計算されます。
canvas.drawLine(0, 0, 100, 0, mPaint); は、左から相対的に x と y 座標が 0 である位置から開始し、右に 100 ピクセルの点線を描画することを意味します。

Button ボタンを削除すると、図に示すように、相対位置が画面の左端に基づいて計算され始めます。

もう 1 つ注意すべき点は、値がstopX と stopY の値は、xml のレイアウト幅とレイアウト高さの値を超えることはできません。それ以外の場合は、最小値が基準として使用され、超えた長さは無効になります。

2. 垂直の点線を描画します

は上記のコードと同じですが、次のように変更するだけです:

canvas.drawLine(0, 0, 0, 100, mPaint);

3. 塗りつぶしの円を描画します

1) まず、ブラシ スタイルを Solid に設定します

mPaint.Style.FILL) //ブラシ スタイルを fill に設定します

2)。キャンバス内の円

Canvas.drawCircle(50, 50, 50, mPaint);

同様に、X と Y の値は、XML 内のコントロールのlayout_width とlayout_height の値を超えることはできません。

4. 円を描画します

また、コードを少し変更するだけです:

  @Override
  protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    canvas.drawCircle(50, 50, 50, mPaint); //画一个外圆
    mPaint.setColor(Color.WHITE);      //重新设置画笔颜色
    canvas.drawCircle(50, 50, 30, mPaint); //画一个内圆
  }
ログイン後にコピー

5. 長方形を描画します

以上がAndroid カスタム ビューを使用してシェイプ グラフィックス描画を実装する方法を説明します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート