Это отлично работает для меня. Он позволяет вводить значение даже после того, как фокус изменен и восстановлен обратно. Например: 123.00
, 12.12
, 0.01
и т. Д.
1. Integer.parseInt(getString(R.string.valuelength))
Определяет длину входа digits.Values
, доступ к которому получен из файла string.xml
. для изменения значений. 2. Integer.parseInt(getString(R.string.valuedecimal))
, это максимальный предел десятичных мест.
private InputFilter[] valDecimalPlaces;
private ArrayList<EditText> edittextArray;
valDecimalPlaces = new InputFilter[] { new DecimalDigitsInputFilterNew(
Integer.parseInt(getString(R.string.valuelength)),
Integer.parseInt(getString(R.string.valuedecimal)))
};
Массив значений EditText
, который позволяет выполнять действие.
for (EditText etDecimalPlace : edittextArray) {
etDecimalPlace.setFilters(valDecimalPlaces);
Я просто использовал массив значений, которые содержат несколько файлов edittext Next DecimalDigitsInputFilterNew.class
.
import android.text.InputFilter;
import android.text.Spanned;
public class DecimalDigitsInputFilterNew implements InputFilter {
private final int decimalDigits;
private final int before;
public DecimalDigitsInputFilterNew(int before ,int decimalDigits) {
this.decimalDigits = decimalDigits;
this.before = before;
}
@Override
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
StringBuilder builder = new StringBuilder(dest);
builder.replace(dstart, dend, source
.subSequence(start, end).toString());
if (!builder.toString().matches("(([0-9]{1})([0-9]{0,"+(before-1)+"})?)?(\\.[0-9]{0,"+decimalDigits+"})?")) {
if(source.length()==0)
return dest.subSequence(dstart, dend);
return "";
}
return null;
}
}
Существует много алгоритмов для этой проблемы. Он называется « минимальный ограничивающий прямоугольник ». Вы также найдете решения для поиска " выпуклой оболочки ", особенно здесь .
Вы, вероятно, имеете в виду, что вы хотите наименьшую площадь, которая является выпуклой оболочкой.
Если вам действительно нужно наименьшее количество точек , вы можете просто сделать треугольник с очень большими позициями вершин, чтобы все ваши точки были заключены.
Вот хороший ресурс по алгоритмам выпуклой оболочки: Выпуклая оболочка двумерного набора точек или многоугольника (автор Dan Sunday)
Вот простое решение ...
Начните с любых трех точек, чтобы сформировать треугольник. Добавьте каждую дополнительную точку к многоугольнику с помощью следующей операции:
Разделите ребра на два непрерывных пути, где в одном пути линия каждого ребра отделяет точку, которая будет добавлена от остальной части многоугольника (назовем это « разделяющий путь "), а на другом пути линия каждого ребра имеет точку на той же стороне, что и многоугольник.
(Примечание: пока ваша форма остается выпуклой, что и должно быть, эти два пути будут непрерывными и формируют всю форму)
Если разделительный путь не имеет ребер, точка находится внутри многоугольника и должна игнорироваться, в противном случае удалите разделительный путь из многоугольника. Замените его двумя сегментами, соединяющими каждую конечную точку разделяющего пути с новой точкой.
Та-да! :)