Mostrando entradas con la etiqueta crear aplicaciones para moviles. Mostrar todas las entradas
Mostrando entradas con la etiqueta crear aplicaciones para moviles. Mostrar todas las entradas

miércoles, 26 de julio de 2017

Como importar una libreria en android studio

hola amig@s programadores hoy veremos un tema muy interesante, he visto en los programadores novatos tener mucho problemas a la hora que quieren exportar sus librerías externas mejor dicho los archivos .jar  y cuando buscan información al respecto y luego no les funciona su copia y pega empiezan a llorar buuuu, así que hoy lo explicaremos de forma detallada y con manzanitas para dar por cerrado este tema.

Empezamos nos llevara un aproximado de 3 minutos.

Cómo importar librerías .jar en Android Studio



  • Una vez situado en tu proyecto Android Studio, ve a la carpeta "libs" en caso de no existir crea la carpeta a la altura de build y src.



  • Una vez hayas creado esta carpeta, ya podrás añadir todos tus archivos con extensión .jar


      Pero esto no termina aquí, porque el siguiente paso es muy importante, necesitas añadir las dependencias a Build.gradle (Module:app).



  • En este ejemplo añadimos la librería frutas.jar Para ello, añadimos el siguiente código en Build.gradle, en dependencies(). Se hace igual para cualquier librería:
dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:25.3.0'
    compile files('libs/frutas.jar')
}

Si analizamos un poco nos damos cuenta que empezamos con el compile files luego le indicamos que esta en la carpeta libs para luego indicarle que le haremos referencia al archivo frutas.jar

AH! PILLIN  aun no acabamos falta lo mas importante 

  • Y por último, tras añadir este trocito de código, necesitas hacer la sincronización del proyecto con el gradle. Te saldrá un aviso en amarillo en la parte superior, puedes hacer clic en “Sync Project with Gradle Files“.

Lo vemos en la siguiente imagen:

                                                           Clic para agrandar la imagen


No tendremos que hacer nada más que esto para tener las librerías que necesitemos en Android. Bueno cuídense mucho y no se rompan la cabeza:

NOTA: una vez un usuario siguió esta guía y ya quería llorar porque no le funcionaba, adivinen que? descargo mal la librería jajajajaja xD


ENLACES DE INTERÉS:


jueves, 13 de abril de 2017

como subir una imagen desde android a una base de datos en mysql

Hola amigos y amigas programadores les traigo un nuevo tutorial de como subir una imagen desde android a una base de datos en mysql.
A pedido de un subscriptor de youtube vamos hacerlo, algo rápido porque ando de vacaciones, si no les queda muy claro solo me escriben:

PASO: 1   Crear nuestra Web Services

Bien para este tuto haremos nuestra ws en la nube :)  utilizare el hosting gratuito webcindario:
y debemos crear nuestra base de datos con tres campos, como se muestra en la siguiente imagen


Ahora debemos crear nuestro archivo dbConnect.php
<?php 
 
 define('HOST','mysql.webcindario.com');
 define('USER','usuario del hosting');
 define('PASS','pass del usuario');
 define('DB','nombre de base de datos');
 
 $con = mysqli_connect(HOST,USER,PASS,DB) 
 or die('unable to connect to db');


Recuerda que los datos debes cambiarlo según el lugar donde tengas tu base de datos:
Ahora debemos de crear nuestro archivo upload.php
<?php
 
 if($_SERVER['REQUEST_METHOD']=='POST'){
 
 $imagen= $_POST['foto'];
                $nombre = $_POST['nombre'];
 
 require_once('dbConnect.php');
 
 $sql ="SELECT id FROM frutas ORDER BY id ASC";
 
 $res = mysqli_query($con,$sql);
 
 $id = 0;
 
 while($row = mysqli_fetch_array($res)){
 $id = $row['id'];
 }
 
 $path = "uploads/$id.png";
 
 $actualpath = "http://servermorefast.webcindario.com/ImagenConNombre/$path";
 
 $sql = "INSERT INTO frutas (foto,nombre) VALUES ('$actualpath','$nombre')";
 
 if(mysqli_query($con,$sql)){
 file_put_contents($path,base64_decode($imagen));
 echo "Subio imagen Correctamente";
 }
 
 mysqli_close($con);
 }else{
 echo "Error";
 }

 Esos dos archivos deben subirlo a su hosting o servidor local y aparte deben crear una carpeta llamada uploads donde se guardara las imágenes y quedara como en la siguiente imagen.




PARTE 2: Ahora toca meter mano a la aplicación en android, nuestro activity_main.xml tendra lo siguiente

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:orientation="vertical"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">


    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Elegir imagen"
        android:id="@+id/btnBuscar" />


    <ImageView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:id="@+id/imageView" />


    <EditText
        android:id="@+id/editText"
        android:hint="Ingresa un Nombre"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Subir Imagen"
        android:id="@+id/btnSubir" />


</LinearLayout>


Y por ultimo nuestro MainActivity.java 

public class MainActivity extends AppCompatActivity implements View.OnClickListener  {

    private Button btnBuscar;
    private Button btnSubir;

    private ImageView imageView;

    private EditText editTextName;

    private Bitmap bitmap;

    private int PICK_IMAGE_REQUEST = 1;

    private String UPLOAD_URL ="http://servermorefast.webcindario.com/upload.php";

    private String KEY_IMAGEN = "foto";
    private String KEY_NOMBRE = "nombre";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btnBuscar = (Button) findViewById(R.id.btnBuscar);
        btnSubir = (Button) findViewById(R.id.btnSubir);

        editTextName = (EditText) findViewById(R.id.editText);

        imageView  = (ImageView) findViewById(R.id.imageView);

        btnBuscar.setOnClickListener(this);
        btnSubir.setOnClickListener(this);
    }

    public String getStringImagen(Bitmap bmp){
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bmp.compress(Bitmap.CompressFormat.JPEG, 100, baos);
        byte[] imageBytes = baos.toByteArray();
        String encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT);
        return encodedImage;
    }

    private void uploadImage(){
        //Mostrar el diálogo de progreso
        final ProgressDialog loading = ProgressDialog.show(this,"Subiendo...","Espere por favor...",false,false);
        StringRequest stringRequest = new StringRequest(Request.Method.POST, UPLOAD_URL,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String s) {
                        //Descartar el diálogo de progreso
                        loading.dismiss();
                        //Mostrando el mensaje de la respuesta
                        Toast.makeText(MainActivity.this, s , Toast.LENGTH_LONG).show();
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError volleyError) {
                        //Descartar el diálogo de progreso
                        loading.dismiss();

                        //Showing toast
                        Toast.makeText(MainActivity.this, volleyError.getMessage().toString(), Toast.LENGTH_LONG).show();
                    }
                }){
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                //Convertir bits a cadena
                String imagen = getStringImagen(bitmap);

                //Obtener el nombre de la imagen
                String nombre = editTextName.getText().toString().trim();

                //Creación de parámetros
                Map<String,String> params = new Hashtable<String, String>();

                //Agregando de parámetros
                params.put(KEY_IMAGEN, imagen);
                params.put(KEY_NOMBRE, nombre);

                //Parámetros de retorno
                return params;
            }
        };

        //Creación de una cola de solicitudes
        RequestQueue requestQueue = Volley.newRequestQueue(this);

        //Agregar solicitud a la cola
        requestQueue.add(stringRequest);
    }

    private void showFileChooser() {
        Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {
            Uri filePath = data.getData();
            try {
                //Cómo obtener el mapa de bits de la Galería
                bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath);
                //Configuración del mapa de bits en ImageView
                imageView.setImageBitmap(bitmap);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    @Override
    public void onClick(View v) {

        if(v == btnBuscar){
            showFileChooser();
        }

        if(v == btnSubir){
            uploadImage();
        }
    }
}


Ahora debemos agregar la libreria volley a dependencias en buil.gradle

compile 'com.mcxiaoke.volley:library-aar:1.0.0'


quedaría algo así




dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:23.0.1'
    compile 'com.mcxiaoke.volley:library-aar:1.0.0'
}

Y por ultimo un permiso en el androidManifest

<uses-permission android:name="android.permission.INTERNET"/>


El producto final seria lo siguiente:

EN EL ANDROID

   




EN EL SERVIDOR


Las imágenes se guardan en la BD con el nombre original y en la carpeta uploads con un numero, de esa forma aunque se repitan de nombre las fotos, no se chancaran al momento de cargarlos.


Igual si piensas que hablo escribo en chino te dejo el ejercicio:

  Link de la descarga
Programador alfa, lomo plateado, barba de clavos, mentón de roca, no descarga la aplicación sigue el tutorial. Clic para DESCARGAR

     
ENLACES DE INTERÉS:

domingo, 2 de abril de 2017

Como hacer un splash screen en android studio

Hola a todos hoy veremos un tutorial de como hacer un SPLASH SCREEN en android personalmente a mi me gusta este tipo de artículos, porque de alguna forma te enseñan a mejorar la estética de tu producto final, hay un dicho entre programadores,  "los que programan diseñan mal" y eso no es cierto si bien es verdad que en países avanzados existe un sujeto para cada trabajo, en Latinoamerica una sola persona es analista,diseñadora,programador, marketero etc de cosas y si bien es cierto esto genera muchas veces que las cosas se hagan a medias un programador que desarrolle mas de una actitud siempre hará bien su trabajo, con esto te digo que no debes hacer 20 cosas tu mismo porque nunca seras bueno en todo pero al menos puedes programar y hacer interfaces amigables para tus usuario.




Que es un Splash Screen?

No vamos hacer técnicos en la definición, Te has dado cuenta que cuando descargas alguna aplicación  y le das en ejecutar y carga hermosas entradas antes de ejecutarse "eso es un Splash Screen" te dejo algunos ejemplos en las siguientes imágenes:




Bien sin mas rodeos empezamos, hay muchas formas de hacerla pero en este tuto amantes delas frutas y los fragment, lo haremos con fragment :)
utilizaremos 3 layouts y 3 clases y para hacer los efectos del Splash Screen 2 layout en la carpeta animator.

activity_main.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/contenedor"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

</FrameLayout>

MainActivity.java

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

}


fragment_main.xml

<RelativeLayout 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"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Bienvenidos!!"
        android:textSize="60sp" />

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:srcCompat="@drawable/logo1"
        android:layout_marginTop="110dp"
        android:id="@+id/imageView3"
        android:layout_below="@+id/textView"
        android:layout_centerHorizontal="true" />

</RelativeLayout>


MainFragment.java

public class MainFragment extends Fragment {

 @Override
 public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
  return inflater.inflate(R.layout.fragment_main, container, false);
 }

}


fragment_splash_screen

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".SplashScreenFragment" >

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:contentDescription="@string/app_name"
        android:scaleType="fitXY"
        android:src="@drawable/cereza1" />

</RelativeLayout>


SplashScreenFragment.java

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".SplashScreenFragment" >

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:contentDescription="@string/app_name"
        android:scaleType="fitXY"
        android:src="@drawable/cereza1" />

</RelativeLayout>

Bien ahora debemos crear la carpeta animator dentro de la carpeta res no puede ser otro nombre o no lo reconocerá android studio.
Dentro de nuestra carpeta animator crearemos dos layout y serán los siguientes:


salir_a_la_izquierda_xml

<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <!-- Rotate. -->
    <objectAnimator
        android:duration="10"
        android:interpolator="@android:interpolator/accelerate_decelerate"
        android:propertyName="rotationY"
        android:valueFrom="0"
        android:valueTo="180" />

    <!-- Half-way through the rotation (see startOffset), set the alpha to 0. -->
    <objectAnimator
        android:duration="1"
        android:propertyName="alpha"
        android:startOffset="10"
        android:valueFrom="1.0"
        android:valueTo="0.0" />

</set>


voltear_a_la_izquierda.xml

<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <!-- Before rotating, immediately set the alpha to 0. -->
    <objectAnimator
        android:duration="0"
        android:propertyName="alpha"
        android:valueFrom="1.0"
        android:valueTo="0.0" />

    <!-- Rotate. -->
    <objectAnimator
        android:duration="100"
        android:propertyName="rotationY"
        android:valueFrom="-180"
        android:valueTo="0" />

    <!-- Half-way through the rotation (see startOffset), set the alpha to 1. -->
    <objectAnimator
        android:duration="1"
        android:propertyName="alpha"
        android:startOffset="10"
        android:valueFrom="0.0"
        android:valueTo="1.0" />

</set>


en la carpeta drawable debe ir la imagen de nuestro Splash Screen, les dejo la del ejemplo




Dentro de la carpeta values debemos agregar un archivo llamado color.xml y tendrá lo siguiente:

color.xml 

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#3F51B5</color>
    <color name="colorPrimaryDark">#303F9F</color>
    <color name="colorAccent">#FF4081</color>
</resources>

También modificaremos nuestro archivo styles y debe quedar de la siguiente forma:

style.xml

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

</resources>


Y con eso hemos terminado este tutorial, espero les sirva y no se olviden de comentar cualquier duda.


Igual si piensas que hablo escribo en chino te dejo el ejercicio:

  Link de la descarga
Programador alfa, lomo plateado, barba de clavos, mentón de roca, no descarga la aplicación sigue el tutorial. Clic para DESCARGAR

     
ENLACES DE INTERÉS:

sábado, 1 de abril de 2017

Como utilizar y diseñar un seekbar en android studio

Hola chicos hoy veremos como utilizar un SeekBar, pero que es un Seekbar?. Es una herramienta de android(extension de ProgressBar) que permite la selección de valores enteros utilizando una interfaz de usuario natural. Básicamente SeekBar tiene una perilla que se puede deslizar para elegir un valor entre 0 y algún máximo que ha establecido.(1-100) Si quieren profundizar en el tema revisen el siguiente enlace Aquí.


SeekBar

Empezamos con un ejercicio sencillo:

Activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="20dp"
    android:gravity="center"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/txtCargar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="20dp"
        android:gravity="center"
        android:text="Ejemplo SeekBar"
        android:textColor="#000"
        android:textSize="50sp"  />

    <SeekBar
        android:id="@+id/seekbar"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:background="#ccc"
        android:layout_margin="20dp" />

</LinearLayout>


MainActivity.java

public class MainActivity extends AppCompatActivity {

    private TextView mostrarPorcentaje;
    private SeekBar seekBar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mostrarPorcentaje = (TextView)findViewById(R.id.txtCargar);

        // SeekBar
        seekBar = (SeekBar)findViewById(R.id.seekbar);
        // Valor Inicial
        seekBar.setProgress(0);
        // Valot Final
        seekBar.setMax(100);
        seekBar.setOnSeekBarChangeListener(
                new SeekBar.OnSeekBarChangeListener() {
                    //hace un llamado a la perilla cuando se arrastra
                    @Override
                    public void onProgressChanged(SeekBar seekBar,
                                                  int progress, boolean fromUser) {
                        mostrarPorcentaje.setText(String.valueOf(progress)+" %");
                    }

                    //hace un llamado  cuando se toca la perilla
                    public void onStartTrackingTouch(SeekBar seekBar) {
                    }

                    //hace un llamado  cuando se detiene la perilla
                    public void onStopTrackingTouch(SeekBar seekBar) {
                    }
                });
    }
}


Los valores iniciales y máximo, respectivamente:
seekBar.setProgress (0);
seekBar.setMax (100);


PERSONALIZAR

Veremos que se puede personalizar fácilmente.

Cambiar el color de fondo:
Cambiar e icono de la perilla.
Personalizar en el fondo.

Fondo
<SeekBar
    android:id="@+id/seekbar"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:background="#faa"
    android:layout_margin="20dp" />





Cambiar e icono de la perilla.

Debemos poner un icono en la carpeta Drawable y luego hacer la llamada desde nuestro xml.

android:thumb="@drawable/icono_personalizado"


<SeekBar
        android:id="@+id/seekbar"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:thumb="@drawable/icono_peronalizado"
        android:background="#ccc"
        android:layout_margin="20dp" />


Personalizar el Fondo

En nuestra carpeta drawable debemos crear un archivo llamado gestionar_seekbar.xml y debe contener lo siguiente.

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@android:id/background">
        <shape android:shape="rectangle">
            <solid android:color="#888"/>
            <corners android:radius="8dp" />
        </shape>
    </item>
    <item android:id="@android:id/progress">
        <clip>
            <shape android:shape="rectangle">
                <solid android:color="#04f"/>
                <corners android:radius="8dp" />
            </shape>
        </clip>
    </item>
</layer-list>
Debemos llamarlo en nuestro activity_main.xml y quedaria de la siguiente forma:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="20dp"
    android:gravity="center"
    tools:context=".MainActivity">
 
    <TextView
        android:id="@+id/txtCargar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="20dp"
        android:gravity="center"
        android:text="Ejemplo SeekBar"
        android:textColor="#000"
        android:textSize="50sp"  />
 
    <SeekBar
        android:id="@+id/seekbar"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:progressDrawable="@drawable/gestionar_seekbar"
        android:background="#ccc"
        android:layout_margin="20dp" />
 
</LinearLayout>
Y el producto final seria algo como la siguiente  imagen, espero les haya gustado:
ENLACES DE INTERÉS:

 

Copyright @ 2015 Android-facil.

Designed by Draganus | AndroidFacil