Cómo crear una página de instrucciones semi-transparente en Android?

Soy nuevo en Android y tratando de trabajar en este problema durante los últimos 2 días, pero podría encontrar una solución. Cualquier ayuda será muy apreciada. Cómo crear una página semitransparente para la instrucción utilizada por un contador de calorías de aplicaciones en Android Market?

Página de instrucciones en Android

Cree una nueva actividad y configure la vista de nivel superior para que tenga un fondo translúcido:

 android:background="#c0000000" 

EDIT: También es necesario declarar la actividad para tener un fondo transparente. Establecer este tema para la actividad en el manifiesto funcionará:

 android:theme="@android:style/Theme.Translucent" 

Acabo de implementar la respuesta de Ted en uno de mis proyectos. ¡Estupendo! Extremadamente fácil de implementar y gran resultado. Muchas gracias por este Ted.

Pero como Stack Overflow es para tomar y compartir, me gustaría compartir mi implementación de una vista personalizada que crea flechas en forma de una "aguja" que usé con el enfoque de Ted para completar la respuesta original. Aquí está el código:

 package com.yourpackage; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.PointF; import android.util.AttributeSet; import android.view.View; import de.nantoka.miep.R; public class CoachmarkArrow extends View { private static final float CIRCLE_RADIUS = 1.5f; private static final int TOPLEFT = 0; private static final int TOPRIGHT = 1; private static final int BOTTOMLEFT = 2; private static final int BOTTOMRIGHT = 3; Paint paint; int from, to; PointF padding = new PointF(); PointF fromPoint = new PointF(); PointF toPoint = new PointF(); public CoachmarkArrow (Context context, AttributeSet attrs) { super(context, attrs); TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.CoachmarkArrow, 0, 0); getPaint(a); getFromTo(a); a.recycle(); } private void getFromTo(TypedArray a) { from = a.getInt(R.styleable.CoachmarkArrow_from, BOTTOMLEFT); to = a.getInt(R.styleable.CoachmarkArrow_to, TOPLEFT); } private void getPaint(TypedArray a) { paint = new Paint(); paint.setColor(a.getColor(R.styleable.CoachmarkArrow_color, Color.WHITE)); paint.setStrokeWidth(a.getDimensionPixelSize(R.styleable.CoachmarkArrow_size, 0)); paint.setStrokeCap(Paint.Cap.BUTT); paint.setAntiAlias(true); } @Override protected void onDraw (Canvas canvas){ calculatePadding(canvas); calculateLinePoints(); drawLine(canvas, fromPoint, toPoint); drawCircle(canvas, fromPoint); } private void calculateLinePoints() { fromPoint = getPoint(from); toPoint = getPoint(to); } private void calculatePadding(Canvas canvas) { padding.x = CIRCLE_RADIUS * paint.getStrokeWidth() / canvas.getWidth(); padding.y = CIRCLE_RADIUS * paint.getStrokeWidth() / canvas.getHeight(); } private PointF getPoint(int position) { PointF point = new PointF(); if (position == TOPRIGHT || position == BOTTOMRIGHT){ point.x = 1.0f - padding.x; } else { point.x = padding.x; } if (position == BOTTOMLEFT || position == BOTTOMRIGHT){ point.y = 1.0f - padding.y; } else { point.y = padding.y; } return point; } private void drawCircle(Canvas canvas, PointF fromPoint) { canvas.drawCircle( canvas.getWidth() * fromPoint.x, canvas.getHeight() * fromPoint.y, CIRCLE_RADIUS * paint.getStrokeWidth(), paint ); } private void drawLine(Canvas canvas, PointF fromPoint, PointF toPoint) { canvas.drawLine( canvas.getWidth() * fromPoint.x, canvas.getHeight() * fromPoint.y, canvas.getWidth() * toPoint.x, canvas.getHeight() * toPoint.y, paint ); } } 

Agregue esta clase a su proyecto (cualquier nombre de paquete está bien) y cree un archivo de atributo en res / values ​​para los parámetros XML:

 <?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="CoachmarkArrow"> <attr name="size" format="dimension" /> <attr name="color" format="color" /> <attr name="from" format="enum"> <enum name="topleft" value="0"/> <enum name="topright" value="1"/> <enum name="bottomleft" value="2"/> <enum name="bottomright" value="3"/> </attr> <attr name="to" format="enum"> <enum name="topleft" value="0"/> <enum name="topright" value="1"/> <enum name="bottomleft" value="2"/> <enum name="bottomright" value="3"/> </attr> </declare-styleable> </resources> 

Ahora puede crear las "agujas" en el XML-Layout de su actividad coachmarks como cualquier otra vista, por ejemplo

 <com.yourpackage.CoachmarkArrow xmlns:coachmark="http://schemas.android.com/apk/res/com.yourproject" android:layout_height="100dp" android:layout_width="match_parent" coachmark:size="3dip" coachmark:color="@android:color/white" coachmark:from="bottomright" coachmark:to="topleft" /> 

Crea una "aguja" que tiene la cabeza en la parte inferior derecha y la punta en la esquina superior izquierda de un rectángulo que es 100 dp alto y tan amplio como el que contiene Parent ViewGroup.

De esta manera usted puede crear coachmarks que se adaptan automáticamente a los diferentes tamaños de pantalla. Por ejemplo, si utiliza un diseño relativo, cree una vista ficticia para el elemento de la interfaz de usuario que desee describir en su actividad coachmarks y indique al diseño relativo que coloque la marca del entrenador debajo de la vista ficticia pero encima del cuadro de texto explicativo que centra En el medio de la ventana. De esta forma, la cota obtiene automáticamente el tamaño correcto para apuntar desde el cuadro de texto al elemento de interfaz de usuario.

Espero que esto ayude a alguien!

He intentado hacer algo similar. He hecho el diálogo del mensaje con el uso de la actividad. Para esta actividad escribí en Manifiesto:

 <activity android:name=".MessDial" android:label="@string/lblDialog" android:theme="@style/Theme.Transparent"> </activity> 

En el cuerpo de esta actividad no tengo nada especial de transparencia.

Espero que te ayude.

Puede probar este ejemplo para mostrar la primera pantalla de instrucciones sin ninguna otra biblioteca
Si desea mostrar la instrucción sólo en la primera vez, puede agregar algunos indicadores al almacenamiento de Preferencias. Un ejemplo se puede encontrar aquí

 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); SharedPreferences pref= PreferenceManager.getDefaultSharedPreferences(getBaseContext()); boolean check = pref.getBoolean("firstime", true); if(check==true){ Intent i = new Intent(MainActivity.this, Tutorial_screen.class);//starting activity for the Frist time startActivity(i); } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.