2013-11-13 3 views
0

Я рисую прямоугольники динамически в своем приложении, но по какой-то причине правая граница не появляется. Появляются три другие границы. Вот мой код для пользовательского представления:Правая сторона границы не указана

private class RectView extends View{ 

    int leftX, rightX, topY, bottomY; 
    boolean isAppt; 
    private Paint rectPaint; 
    private Rect rectangle; 
    String time; 

    public RectView(Context context, int _leftX, int _rightX, int _topY, int _bottomY, 
      boolean _isAppt, String _time){ 
     super(context); 
     leftX = _leftX; 
     rightX = _rightX; 
     topY = _topY; 
     bottomY = _bottomY; 
     isAppt = _isAppt; 
     time = _time; 
     init(); 
    } 

    private void init(){ 

     rectPaint = new Paint(); 

     if(isAppt){ 
      rectPaint.setARGB(144, 217, 131, 121); 
      rectPaint.setStyle(Style.FILL); 
     } 
     else{ 
      rectPaint.setARGB(0, 0, 0, 0); 
      rectPaint.setStyle(Style.FILL); 
     } 
     if(leftX > rightX || topY > bottomY) 
      Toast.makeText(context, "Incorrect", Toast.LENGTH_SHORT).show(); 
     rectangle = new Rect(leftX, topY, rightX, bottomY); 

     int height = bottomY; 
     int width = rightX - leftX; 
     MyUtility.LogD_Common("Height = " + height + ", Width = " + width); 
     RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(width, height); 
     params.leftMargin = leftX; 
     params.rightMargin = 10; 
     setLayoutParams(params); 
    } 

    protected void onDraw(Canvas canvas){ 
     super.onDraw(canvas); 
     canvas.drawRect(rectangle, rectPaint); 
     if(isAppt){ 
      rectPaint.setColor(Color.RED); 
      rectPaint.setStrokeWidth(2); 
      rectPaint.setStyle(Style.STROKE); 
      canvas.drawRect(rectangle, rectPaint); 
     } 
    } 

} 

Что вызывает неправильная граница, чтобы не отображать?

+0

Вряд ли правый край рисуется за пределами пользовательского вида; например, из-за ограничений, добавленных путем установки поля. –

+0

Будет ли какой-либо способ иметь ограничения и все еще иметь обратный край? – SecretBit

ответ

0

Я попробовал ваш код и он показывает идеально подходит для меня:

public class MainActivity extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 
      this.addContentView(new RectView(this, 10, 100, 10, 100, true, "abcd"), new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
    } 
} 

Пожалуйста, проверьте параметры:

new RectView(this, 10, 100, 10, 100, true, "abcd") 

Если _righX и _bottomY больше, чем размер экрана, правая граница выиграл не отображается на экране:

new RectView(this, 10, 1000, 10, 1000, true, "abcd") 

Существует способ определения размера экрана a nd ограничить размер прямоугольника:

int screenWidth = ((Activity)context).getWindowManager().getDefaultDisplay().getWidth(); 
int screenHeight = ((Activity)context).getWindowManager().getDefaultDisplay().getHeight(); 

if(rightX > screenWidth) 
    rightX = screenWidth; 

if(bottomY > screenHeight) 
    bottomY = screenHeight; 

rectangle = new Rect(leftX, topY, rightX, bottomY); 
Смежные вопросы