Intereting Posts
BeginTransaction (), endTransaction () и setTransactionSuccessful (). Что именно они делают? Ускорение создания приложений Android – компилятор Java для использования нескольких ядер процессора Как я могу настроить вкладки Android, чтобы получить 3D-взгляд? Android-плагин для плагинов multidex ZipException Разбор строки JSON в android Нажатие на значок гамбургера на панели инструментов не открывает навигационный ящик Build.xml version.tag для системных инструментов 14, синтаксис? Создание приложений для Android без Java Экспериментальная поддержка JUnit в Android + Kotlin не работает Как отключить D / libc от регистрации сетевой информации в logcat? Как проинструктировать пользователей сообщать об ошибке в Android Завершить все предыдущие действия Как программно добавлять сертификаты в доверительный магазин и использовать их для проверки подлинности сервера Android: быстрое размытие растрового изображения? LinearLayout animate () создает клики, clipPhildren не работает

Как создать пользовательскую панель поиска в android?

Я хочу сделать бар для поиска клиентов следующим образом:

Введите описание изображения здесь

Я проверил это и это . Если у кого-нибудь есть представление об этом. Пожалуйста, поделитесь им. Спасибо

Solutions Collecting From Web of "Как создать пользовательскую панель поиска в android?"

Если я правильно понял, вы хотите создать числовое значение выше фактического ползунка, который перемещается вдоль сферы.

Одна вещь, которую вы можете сделать, это написать текст над фактическим изображением слайдера путем «слияния» текста непосредственно с вытягиваемым файлом изображения orb.

Я предполагаю, что вы используете первый учебник, который вы предоставили в своем первоначальном вопросе

public class CustomSeekBar extends Activity { SeekBar mybar; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_custom_seek_bar); mybar = (SeekBar) findViewById(R.id.seekBar1); mybar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { @Override public void onStopTrackingTouch(SeekBar seekBar) { //add here your implementation } @Override public void onStartTrackingTouch(SeekBar seekBar) { //add here your implementation } @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { int value = seekBar.getProgress(); //this is the value of the progress bar (1-100) //value = progress; //this should also work String valueString = value + ""; //this is the string that will be put above the slider seekBar.setThumb(writeOnDrawable(R.drawable.thumbler_small, value)); } }); } public BitmapDrawable writeOnDrawable(int drawableId, String text){ Bitmap bm = BitmapFactory.decodeResource(getResources(), drawableId).copy(Bitmap.Config.ARGB_8888, true); Paint paint = new Paint(); paint.setStyle(Style.FILL); paint.setColor(Color.BLACK); //Change this if you want other color of text paint.setTextSize(20); //Change this if you want bigger/smaller font Canvas canvas = new Canvas(bm); canvas.drawText(text, 0, bm.getHeight()/2, paint); //Change the position of the text here return new BitmapDrawable(bm); } } 

Это извлекает из ваших ресурсов возможность нарисовать текст поверх него и возвращает новый доступный. Используйте seekBar.getProgress(); Для получения необходимой стоимости с вашей панели поиска.

Я рекомендую немного очистить код, потому что теперь он создает новый объект краски каждый раз, когда вы касаетесь поискового бара, который действительно плох.

Вам нужно будет сделать больше вещей, чтобы они работали, только когда вы нажимаете на шар, хотя …

XML-код

  <SeekBar android:id="@+id/seekBar1" android:layout_width="match_parent" android:layout_height="wrap_content" android:progressDrawable="@drawable/seek_bar" android:paddingLeft="15dp" android:paddingRight="15dp" android:thumb="@drawable/thumbler_small" android:indeterminate="false" /> 

seek_bar.xml

  <?xml version="1.0" encoding="UTF-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+android:id/SecondaryProgress" android:drawable="@drawable/first"/> <item android:id="@+android:id/progress" android:drawable="@drawable/second"/> </layer-list> 

Первый drawable пуст или показан не цвет полной области.

Вторая вытачиваемая – заполняемая или цветная полная площадь.

Эта ссылка поможет вам больше.

Почему бы не написать пользовательский режим поиска.

Вот несколько примеров кода для размещения текста в середине слайдера большого пальца области поиска, и текст перемещается с помощью ползунка. Должна быть легко адаптирована для печати текста поверх слайдера.

 public class CustomSeekBar extends SeekBar { private Paint textPaint; private Rect textBounds = new Rect(); private String text = ""; public CustomSeekBar(Context context) { super(context); textPaint = new Paint(); textPaint.setColor(Color.WHITE); } public CustomSeekBar(Context context, AttributeSet attrs) { super(context, attrs); textPaint = new Paint(); textPaint.setColor(Color.WHITE); } public CustomSeekBar(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); textPaint = new Paint(); textPaint.setColor(Color.WHITE); } @Override protected synchronized void onDraw(Canvas canvas) { // First draw the regular progress bar, then custom draw our text super.onDraw(canvas); // Now progress position and convert to text. text = Integer.toString(getProgress()); // Now get size of seek bar. float width = getWidth(); float height = getHeight(); // Set text size. textPaint.setTextSize((height * 3) / 4); // Get size of text. textPaint.getTextBounds(text, 0, text.length(), textBounds); // Calculate where to start printing text. float position = (width / getMax()) * getProgress(); // Get start and end points of where text will be printed. float textXStart = position - textBounds.centerX(); float textXEnd = position + textBounds.centerX(); // Check does not start drawing outside seek bar. if(textXStart < 0) textXStart = 0; if(textXEnd > width) textXStart -= (textXEnd - width); // Calculate y text print position. float yPosition = (height / 2) - textBounds.centerY(); //- (textBounds.bottom / 2); canvas.drawText(text, textXStart, yPosition, textPaint); } public synchronized void setTextColor(int color) { super.drawableStateChanged(); textPaint.setColor(color); drawableStateChanged(); } 

}

Надеюсь, это вам полезно.

Если вы хотите сделать то же самое, что и на изображении, вам нужно будет предоставить minHeight и maxHeight оба атрибута для поиска в вашем XML-файле. Например:

 <SeekBar android:id="@+id/seekBar1" android:layout_width="match_parent" android:layout_height="wrap_content" android:progressDrawable="@drawable/seek_bar" android:paddingLeft="15dp" android:paddingRight="15dp" android:thumb="@drawable/thumbler_small" **android:minHeight = "20dp" android:maxHeight = "20dp"** android:indeterminate="false" /> 

Проверьте атрибуты в выделенном выше коде.

Сначала создайте xml-файл в вашей папке с возможностью рисования (если не создать новую)
И вставьте этот код или следуйте инструкциям, чтобы сделать это как можно быстрее

repeatbottombackground.xml

  <bitmap android:dither="true" android:src="@drawable/bottom_bar_repeat" android:tilemode="repeat" xmlns:android="http://schemas.android.com/apk/res/android"> </bitmap> 

seek_thumb.xml

 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/seek_thumb_pressed" android:state_pressed="true" android:state_window_focused="true"> <item android:drawable="@drawable/seek_thumb_pressed" android:state_focused="true" android:state_window_focused="true"> <item android:drawable="@drawable/seek_thumb_pressed" android:state_selected="true" android:state_window_focused="true"> <item android:drawable="@drawable/seek_thumb_normal"> </item></item></item></item></selector> 

Я даю вам ссылку, надеюсь, это поможет вам

Извините, мне больше не нужно объяснять, просто следуйте инструкциям 🙂

С уважением,