Desarrolla
una aplicación que aplique transparencia a una imagen, teniendo en cuenta que
el método setAlpha() está obsoleto a
partir de API 16 y que el método setImageAlpha()
no es válido para API 8, solo a partir de API 11. Ambos métodos indican su
valor por entero (0 transparente, 255 opaco).
La guía del
Layout es la siguiente
Como siempre,
mi Layout es un poco distinto, siendo así
Mi idea era
crear una barra de porcentaje de 0 a 100 y que conforme fuera moviéndose la
imagen modificara su transparencia, pero he tenido problemas para buscar la
información para llevar a cabo esa idea (la acabaré haciendo más adelante), así
que lo que he hecho es capturar un porcentaje de texto de 0 a 100, mostrar un
mensaje de advertencia en caso de que se introduzca un número fuera de ese
rango, y calcular el porcentaje introducido sobre la escala de transparencia de
0 a 255.
Los componentes usados
son
El código
programado para los eventos es este (en cuadrado la parte realizada por mí, lo
demás está generado automáticamente).
package es.claver.inazio.transparencia;
import android.annotation.TargetApi;
import android.os.Build;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;
public class Transparencia extends AppCompatActivity {
private Button btnConversor;
private ImageView ordicuso;
private EditText txtPorcentaje;
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_transparencia);
btnConversor = (Button)findViewById(R.id.btnCambiar);
btnConversor.setOnClickListener(new View.OnClickListener() {
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
@Override
public void onClick(View v) {
ordicuso =
(ImageView)findViewById(R.id.imgOrdicuso);
txtPorcentaje =
(EditText)findViewById(R.id.txtPorcentaje);
double p =
Double.parseDouble(txtPorcentaje.getText().toString());
if (p > 100 || p < 0){
Toast t =
Toast.makeText(getApplicationContext(), "Valor de transparencia no
permitido", Toast.LENGTH_SHORT);
t.show();
}
else{
double r = (255 / 100) * p;
int porcentaje =
(int)Math.floor(r);
ordicuso.setImageAlpha(porcentaje);
}
}
});
}
@Override
public boolean
onCreateOptionsMenu(Menu menu) {
// Inflate the
menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_transparencia, menu);
return true;
}
@Override
public boolean
onOptionsItemSelected(MenuItem item) {
// Handle action
bar item clicks here. The action bar will
// automatically
handle clicks on the Home/Up button, so long
// as you specify
a parent activity in AndroidManifest.xml.
int id =
item.getItemId();
//noinspection
SimplifiableIfStatement
if (id ==
R.id.action_settings) {
return true;
}
return
super.onOptionsItemSelected(item);
}
}
Es importante recalcar que el número capturado para el
porcentaje hay que hacerlo en double (o float, algo que permita trabajar con
decimales) y luego parsear el resultado a un entero para cargarlo en el método
de transparencia. El resultado sería algo tal que así.
Por cierto,
la imagen es una vista de los ibones de Ordicuso. Aprovechad a visitarlos, es
un paisaje precioso con formaciones espectaculares y por desgracia están
desapareciendo…
Versión 2
Mejora la
aplicación anterior para conseguir cambiar el color de fondo (método setBackgroundResource()).
La ayuda
del ejercicio es este Layout, pero como siempre me lo saltaré a la torera…
Mi idea es
generar un color aleatorio cada vez que se pulse el botón que acabo de
insertar.
El layout
quedará de la siguiente forma
Y el código
para cambiarlo es:
package
es.claver.inazio.transparencia;
import
android.annotation.TargetApi;
import
android.graphics.Color;
import
android.graphics.drawable.ColorDrawable;
import
android.os.Build;
import
android.provider.CalendarContract;
import
android.support.annotation.DrawableRes;
import
android.support.v7.app.AppCompatActivity;
import
android.os.Bundle;
import
android.text.Layout;
import
android.view.Menu;
import
android.view.MenuItem;
import android.view.View;
import
android.widget.Button;
import
android.widget.EditText;
import
android.widget.ImageView;
import
android.widget.RelativeLayout;
import
android.widget.Toast;
public class
Transparencia extends AppCompatActivity {
private Button btnConversor;
private ImageView ordicuso;
private EditText txtPorcentaje;
private Button btnColor;
private RelativeLayout relLayout;
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_transparencia);
btnConversor =
(Button)findViewById(R.id.btnCambiar);
btnConversor.setOnClickListener(new
View.OnClickListener() {
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
@Override
public void onClick(View v) {
ordicuso =
(ImageView)findViewById(R.id.imgOrdicuso);
txtPorcentaje =
(EditText)findViewById(R.id.txtPorcentaje);
double p =
Double.parseDouble(txtPorcentaje.getText().toString());
if (p > 100 || p < 0){
Toast t =
Toast.makeText(getApplicationContext(), "Valor de transparencia no
permitido", Toast.LENGTH_SHORT);
t.show();
}
else{
double r = (255 / 100) * p;
int porcentaje =
(int)Math.floor(r);
ordicuso.setImageAlpha(porcentaje);
}
}
});
// Código para
cambiar color de fondo
btnColor =
(Button)findViewById(R.id.btnNuevoColor);
btnColor.setOnClickListener(new View.OnClickListener() {
public void
onClick(View v) {
getWindow().setBackgroundDrawable(new ColorDrawable(Color.argb(Color.alpha(generarColor()),
Color.red(generarColor()), Color.green(generarColor()),
Color.blue(generarColor()))));
}
});
}
public int
generarColor(){
return
(int)Math.random()*255+1;
}
@Override
public boolean onCreateOptionsMenu(Menu
menu) {
// Inflate the menu; this adds items to
the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_transparencia, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem
item) {
// Handle action bar item clicks here.
The action bar will
// automatically handle clicks on the
Home/Up button, so long
// as you specify a parent activity in
AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return
super.onOptionsItemSelected(item);
}
}
Y cada vez
que pulsemos el botón se modificará el color de la app.
0 comments:
Publicar un comentario