4

このリンクを参照しました: Androidで点線/破線を作成するにはどうすればよいですか? 、および使用されDashPathEffectます。しかし、これは私にはうまくいきませんか?なぜ?私のコード:

public class NoteEditText extends EditText {
    private Paint mPaint;

    public NoteEditText(Context context) {
        super(context);
    }

    public NoteEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        mPaint = new Paint();
        mPaint.setStrokeWidth(1);
        mPaint.setStyle(Paint.Style.FILL_AND_STROKE);
        mPaint.setColor(Color.DKGRAY);
        PathEffect effects = new DashPathEffect(new float[]{5,5,5,5},1);  
        mPaint.setPathEffect(effects);
    }

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

        int height = this.getHeight();
        int lineHeight = this.getLineHeight();
        int lineNum = height / lineHeight;
        L.l("line count: " + lineNum);
        for (int i = 0; i < lineNum; i++) {
            int y = (i + 1) * lineHeight;
            canvas.drawLine(0, y, this.getWidth() - 1, y, mPaint);
        }
    }
}
4

4 に答える 4

8

メソッド setPathEffect は、ハードウェア アクセラレーションではサポートされていません。デフォルトではオンになっています(Android 4.0以降だと思います)

http://developer.android.com/guide/topics/graphics/hardware-accel.html#unsupported

次のコード スニペットを使用して、コンストラクター内でハードウェア アクセラレーションをオフにすることができます。

setLayerType(View.LAYER_TYPE_SOFTWARE, null);

于 2014-06-28T13:38:18.193 に答える
1
new float[]{5,5,5,5}

試す

new float[]{5,10,15,20}
于 2012-09-15T14:27:21.170 に答える
0

これはうまくいくはずです。

EditText editText=(EditText) v.findViewById(android.R.id.text1);

editText.setPaintFlags(editText.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);

于 2012-09-13T07:57:07.090 に答える
0

「for ループ」を使用して line.set setStrokeWidth($diameter) を描画する必要はないと思います。この機能をサポートする簡単なビューを作成しました。詳細はこちら

于 2013-11-21T08:30:29.457 に答える