我创建了一个自定义视图,但在屏幕中心定位时遇到了困难。
public class CurvedText extends View {
private static final String MY_TEXT = "Select A Mode";
private Path mArc;
private Paint mPaintText;
public CurvedText(Context context, AttributeSet attrs) {
super(context, attrs);
mArc = new Path();
RectF oval = new RectF(0,0,200,200);
mArc.addArc(oval, -45, 200);
mPaintText = new Paint(Paint.ANTI_ALIAS_FLAG);
mPaintText.setStyle(Paint.Style.FILL_AND_STROKE);
mPaintText.setColor(Color.WHITE);
mPaintText.setTextSize(20f);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawTextOnPath(MY_TEXT, mArc, 0, 10, mPaintText);
invalidate();
}
}
我知道我可以使用设置RectF坐标进行解决方法,但我希望此文本位于屏幕中心。那我怎么能动态获取屏幕中心的坐标?或任何其他方式将其定位在屏幕的中心。
添加声明:
<com.pkg.CurvedText
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center" >
</com.pkg.CurvedText>
答案 0 :(得分:0)
private static int [] screenDimens;
/**
* Gets the width and height of the screen. If null is passed, this method returns the previously
* requested parameters.
*
* @param activity {@link android.app.Activity}
* @return int [0] = width, int[1] = height
*/
public static int [] getScreenDimensInPx(Activity activity) {
if(activity != null) {
Display display = activity.getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;
screenDimens = new int[]{width, height};
}
return screenDimens;
}
这应该可以获得屏幕的宽度和高度。屏幕的中心只是宽度/ 2和高度/ 2。当然,您需要参考活动才能执行此操作。
以下是我如何使用我向您展示的代码。在我的项目中,我有一个只包含公共静态方法的Utilities类。在该类中,我保持对包含这些维度的int数组的私有静态引用。每当调用具有上述代码的公共静态函数时,我只需填充私有静态int数组。请注意,该函数接受一个Activity来获取值。在方法中,我检查传入的Activity是否为null。如果它为null,我只返回private static int数组的值。这样,我可以在我的应用程序启动时(从任何Activity)调用此方法一次,并存储这些值。然后,如果我再次需要这些值,我只需调用相同的方法但使用null参数,然后返回我的存储值。希望这是有道理的!