Android, как рисовать пунктирную линию в edittext
Я ссылался на эту ссылку: Как сделать пунктирную/пунктирную линию в 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);
}
}
}
Ответы
Ответ 1
Метод setPathEffect не поддерживается аппаратным ускорением. По умолчанию он включен (я думаю, начиная с Android 4.0)
http://developer.android.com/guide/topics/graphics/hardware-accel.html#unsupported
Вы можете отключить аппаратное ускорение внутри конструктора с помощью следующего фрагмента кода:
setLayerType (View.LAYER_TYPE_SOFTWARE, null);
Ответ 2
new float[]{5,5,5,5}
попробуйте
new float[]{5,10,15,20}
Ответ 3
Это должно работать.
EditText editText = (EditText) v.findViewById(android.R.id.text1);
editText.setPaintFlags(editText.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
Ответ 4
Я не думаю, что вы должны использовать цикл "for" для рисования line.set setStrokeWidth ($ диаметр), возможно, полезно. Я написал простой вид, поддерживающий эту функцию, подробно Здесь