如何在Android中创build一个半透明的指令页面?

我是Android的新手,并试图在这个问题上工作了两天,但可以find一个解决scheme。 任何帮助将不胜感激。 如何为Android Market中的应用程序卡路里计数器创build指令的半透明页面?

Android中的说明页面

Solutions Collecting From Web of "如何在Android中创build一个半透明的指令页面?"

创build一个新的活动,并设置顶级视图有一个半透明的背景:

 android:background="#c0000000" 

编辑:您还需要声明该活动有一个透明的背景。 为清单中的活动设置此主题将起作用:

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

我刚刚在我的一个项目中实现了Ted的答案。 大! 非常容易实现和很好的结果。 非常感谢这个特德。

但是由于Stack Overflow是用于分享和分享的,所以我想分享一下我自己实现的一个自定义视图,这个视图创build了一个“Ted”的forms的箭头,用Ted的方法来完成原始的答案。 这里是代码:

 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 ); } } 

将这个类添加到您的项目(任何包名称都可以),并在res / values下为XML参数创build一个属性文件:

 <?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> 

现在,您可以像在其他任何视图中一样在您的coachmarks活动的XML布局中创build“针”

 <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" /> 

创build一个头部在右下方,顶端在矩形的左上angular的“针”,该矩形的高度为100 dp,并且与包含的父ViewGroup一样宽。

这样,您可以创build自动适应不同屏幕尺寸的coachmarks。 例如,如果您使用相对布局,请在您的coachmarks活动中为要描述的UI元素创build一个虚拟视图,然后告诉相关布局将教练标记放置在虚拟视图下方,但在您居中的说明文本框上方在窗户的中间。 这样,coachmark自动获得正确的大小从文本框指向UI元素。

希望这有助于某人!

我试图做类似的事情。 我已经使用Activity进行了消息对话。 对于这个活动,我在Manifest中写道:

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

在这个活动中,我没有什么特别的透明度。

我希望这会帮助你。

您可以尝试使用此示例来显示首次指令屏幕,而不使用任何其他库
如果只想在第一次显示指令,则可以将某些标志添加到首选存储。 一个例子可以在这里find

 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); }