我如何定位自定义视图?

时间:2014-08-20 13:51:54

标签: android android-layout view

我创建了一个自定义视图,但在屏幕中心定位时遇到了困难。

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>

1 个答案:

答案 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参数,然后返回我的存储值。希望这是有道理的!