0

我正在开发一个跨平台的 android/ios 框架的 android 部分,它可以让你用 JS 编写可以在两个平台上运行的应用程序。我这样说是因为这意味着我不能使用 9-patches 之类的东西来获得这种效果。完整代码在https://github.com/mschulkind/cordova-true-native-android

这是问题的两个屏幕截图:

- 编辑图像是因为我太新了,不能这么有用。当我不再是新手时,我将不得不添加它们。-

这是从https://github.com/mschulkind/cordova-true-native-android/blob/master/src/org/apache/cordova/plugins/truenative/ViewPlugin.java#L146生成可绘制对象的代码

  // Borrowed from:
  // http://www.betaful.com/2012/01/programmatic-shapes-in-android/
  private class ViewBackground extends ShapeDrawable {
    private final Paint mFillPaint, mStrokePaint;
    private final int mBorderWidth;

    public ViewBackground(
        Shape s, int backgroundColor, int borderColor, int borderWidth) {
      super(s);

      mFillPaint = new Paint(this.getPaint());
      mFillPaint.setColor(backgroundColor);

      mStrokePaint = new Paint(mFillPaint);
      mStrokePaint.setStyle(Paint.Style.STROKE);
      mStrokePaint.setStrokeWidth(borderWidth);
      mStrokePaint.setColor(borderColor);

      mBorderWidth = borderWidth;
    }

    @Override
    protected void onDraw(Shape shape, Canvas canvas, Paint paint) {
      shape.resize(canvas.getClipBounds().right, canvas.getClipBounds().bottom);

      Matrix matrix = new Matrix();
      matrix.setRectToRect(
          new RectF(
            0, 0, 
            canvas.getClipBounds().right, canvas.getClipBounds().bottom),
          new RectF(
            mBorderWidth/2, mBorderWidth/2, 
            canvas.getClipBounds().right - mBorderWidth/2,
            canvas.getClipBounds().bottom - mBorderWidth/2),
          Matrix.ScaleToFit.FILL);
      canvas.concat(matrix);

      shape.draw(canvas, mFillPaint);
      if (mBorderWidth > 0) {
        shape.draw(canvas, mStrokePaint);
      }
    }
  }

当直接将drawable设置为EditText的背景以及将其设置为EditText周围的父视图的背景时,都会发生这种情况。

任何人都知道这里发生了什么或我应该探索哪些途径?

4

1 回答 1

0

看起来你想画一个圆角矩形。

要实现这种风格,使用 XML 可绘制对象会更简单。

您只需将 XML 文件放入 drawable/ 目录即可。在这里您可以描述所需的形状。一些关于 XML drawables 的文档在这里:http: //idunnolol.com/android/drawables.html 查看标签。

于 2012-04-19T16:12:07.440 回答