Creación de SeekBar personalizada en Android

SeekBar puede entenderse como una extensión de ProgressBar en Android. Solo tiene que arrastrar el pulgar en SeekBar y arrastrarlo hacia atrás o hacia adelante y almacenar el valor actual del progreso cambiado. SeekBar se usa ampliamente en diferentes aplicaciones, por ejemplo, reproductor de audio, reproductor de video, etc. Puede implementar el SeekBar tradicional proporcionado por Android. En este artículo, veremos cómo podemos personalizar SeekBar de Android. Para crear una SeekBar personalizada, primero diseñaremos nuestra SeekBar y el pulgar de seekBar para esto agregaremos archivos de diseño en dibujables. También podemos usar imágenes como un pulgar para eso, en lugar de crear un diseño, solo tenemos que poner la imagen en el resto dibujable, las cosas serán iguales.

Implementación paso a paso

Paso 1: Crear un nuevo proyecto

Para crear un nuevo proyecto en Android Studio, consulte Cómo crear/iniciar un nuevo proyecto en Android Studio . Tenga en cuenta que seleccione Java como lenguaje de programación.

Paso 2: 

Espere un momento. Después de que finalice la compilación, verá un archivo MainActivity.java y un archivo XML dentro de res -> diseño denominado activity_main.xml.  Crearemos nuestra SeekBar personalizada y la implementaremos en nuestro activity_main.xml.

Paso 3: 

Ahora haga clic con el botón derecho en dibujable -> nuevo -> archivo de recursos dibujable , nombre el archivo como custom_seekbar.xml y especifique el elemento raíz como lista de capas -> haga clic en Aceptar. se creará un nuevo archivo custom_seekbar.xml

Paso 4:  

Ahora, en custom_seekbar.xml dentro de la lista de capas, agregue un elemento y dele una forma. especifique el color, la altura y las esquinas de SeekBar. Además, agregue otro elemento de la misma forma y tamaño, pero puede cambiar el color, la parte izquierda del pulgar de SeekBar será de este color.

Paso 5:  

Ahora nuevamente haga clic en dibujable -> nuevo -> archivo de recurso dibujable , nombre el archivo como thumb.xml y especifique el elemento raíz como forma -> haga clic en Aceptar. se creará un nuevo archivo thumb.xml . Dentro de este archivo, proporcione la altura, el radio y el color del pulgar. estas cosas se pueden cambiar. Depende totalmente de cómo quieras diseñar.

Paso 6:  

Ahora vaya a la actividad_principal.xml cree un diseño y dentro del diseño agregue un SeekBar. Especifique el ancho de altura de SeekBar y el progreso máximo que desea utilizar para establecer el progreso en 0.

android:progressDrawable="@drawable/custom_seekbar"
android:thumb="@drawable/thumb" 
android:max="50"
android:progress="0"

Esto creará una barra de búsqueda personalizada dentro de activity_main.xml .

Paso 7: 

Ahora abra la clase MainActivity.java Declare objetos de SeekBar y TextView, dentro del método onCreate inicialice ambos objetos usando el método findViewById(). Realice un evento de detector de cambio de SeekBar que contendrá el valor de progreso y, al usar este evento, establezca el valor de progreso dentro de TextView .

seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            // increment or decrement on process changed
            // increase the textsize
            // with the value of progress
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                value.setText(progress+"/"+"50");

                
            }..

Paso 8

Compile y ejecute la aplicación. Coloque el pulgar en Seekbar y muévalo hacia adelante o hacia atrás para mostrar el proceso.

El código para la implementación anterior se proporciona a continuación:

A continuación se muestra el código del archivo MainActivity.java . Se agregan comentarios dentro del código para comprender el código con más detalle.

Java

package com.abhi.customseekbar;
 
import androidx.appcompat.app.AppCompatActivity;
 
import android.os.Bundle;
import android.view.View;
import android.widget.SeekBar;
import android.widget.TextView;
 
public class MainActivity extends AppCompatActivity {
     SeekBar seekBar;
     TextView value;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // initialize the seekBar object
        seekBar=findViewById(R.id.seekbar);
        value=findViewById(R.id.progress);
        // calling the seekbar event change listener
        seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            // increment or decrement on process changed
            // increase the textsize
            // with the value of progress
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                value.setText(progress+"/"+"50");            
            }
            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
                // This method will automatically
                // called when the user touches the SeekBar
            }
 
            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                // This method will automatically
                // called when the user
                // stops touching the SeekBar
            }
        });
    }
}

A continuación se muestra el código para el archivo  activity_main.xml .

XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="#458C85"
    tools:context=".MainActivity">
 
    <RelativeLayout
        android:id="@+id/Relative_1"
        android:layout_width="match_parent"
        android:layout_height="350dp"
        android:layout_weight="2">
 
        <TextView
            android:id="@+id/textViewSelectSizeOfArray"
            android:layout_width="273dp"
            android:layout_height="wrap_content"
            android:layout_above="@+id/seekbar"
            android:layout_alignParentStart="true"
            android:layout_alignParentEnd="true"
 
            android:layout_marginBottom="9dp"
            android:text="Custom Seek Bar"
            android:textAlignment="center"
            android:textColor="@color/white"
            android:textSize="25dp" />
 
        <SeekBar
            android:id="@+id/seekbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:indeterminate="false"
            android:max="50"
            android:progress="0"
            android:progressDrawable="@drawable/custom_seekbar"
            android:thumb="@drawable/thumb" />
 
        <TextView
            android:id="@+id/progress"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentBottom="true"
            android:layout_marginLeft="0dp"
            android:layout_marginRight="0dp"
            android:layout_marginBottom="199dp"
            android:padding="10dp"
            android:text="0"
            android:textAlignment="center"
            android:textColor="@color/white"
            android:textSize="30dp"
            android:textStyle="bold">
 
        </TextView>
 
    </RelativeLayout>
 
</LinearLayout>

A continuación se muestra el código para el archivo  custom_seekbar.xml .

XML

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- color, size, shape height of seekbar -->
    <item android:gravity="center_vertical">
        <shape android:shape="rectangle">
            <solid android:color="#605A5C"/>
            <size android:height="30dp"/>
            <corners android:radius="9dp"/>
        </shape>
    </item>
    <!-- color, size, shape height of seekbar when u drag it-->
    <item android:gravity="center_vertical">
        <scale android:scaleWidth="100%">
            <selector>
                <item android:state_enabled="false"
                    android:drawable="@color/purple_200"/>
                <item>
                    <shape android:shape="rectangle">
                        <solid android:color="@color/black"/>
                        <size android:height="30dp"/>
                        <corners android:radius="9dp"/>
                    </shape>
                </item>
            </selector>
        </scale>
    </item>
</layer-list>

A continuación se muestra el código para el archivo thumb.xml

XML

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="@color/purple_200"/>
    <size android:height="30dp" android:width="25dp"/>
    <corners android:radius="5dp"/>
</shape>

Producción:

Enlace del proyecto: Haga clic aquí

Publicación traducida automáticamente

Artículo escrito por abhi001shuklg y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *