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