2015-06-15 2 views
0

Я пытаюсь нарисовать на холсте, но ось Y, как представляется, не так. Похоже, что 0 на самом деле -100.Неправильная ось Y при рисовании на холсте

Например, когда я рисую красный квадрат, который 10 точек от каждой границы я получаю следующую площадь:

enter image description here

код я использую:

Canvas canvas = new Canvas(bitmap); 
    Paint paint = new Paint(); 
    paint.setColor(Color.RED); 
    paint.setStyle(Paint.Style.FILL); 
    canvas.drawRect(10, 10, canvas.getWidth() - 10, canvas.getHeight() - 10, paint); 

Мой макет :

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <include layout="@layout/toolbar" /> 

    <ScrollView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <LinearLayout 
      android:orientation="vertical" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"> 

      <ImageView 
       android:background="@color/facebook_color" 
       android:id="@+id/catchImage" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:scaleType="fitCenter" 
       android:layout_marginBottom="20dp" 
       android:adjustViewBounds="true" /> 

      <View 
       android:background="@color/news_item_seperator_stroke" 
       android:layout_width="match_parent" 
       android:layout_height="1px" 
       android:layout_marginLeft="20dp" 
       android:layout_marginRight="20dp" 
       /> 
     </LinearLayout> 

    </ScrollView> 
</LinearLayout> 

Когда я использую следующий код, все работает S отлично:

Paint paint = new Paint(); 
paint.setColor(Color.RED); 
paint.setStyle(Paint.Style.FILL); 
canvas.drawRect(0, 0, canvas.getWidth()/2, canvas.getHeight()/2, paint); 

Paint paint2 = new Paint(); 
paint.setColor(Color.BLUE); 
paint.setStyle(Paint.Style.FILL); 
canvas.drawRect(canvas.getWidth()/2, canvas.getHeight()/2, canvas.getWidth(), canvas.getHeight(), paint2); 

http://i.imgur.com/54JwLfR.png

+0

Ваш второй код, кажется, работает, потому что это не имеет никакого значения для этого кода, что некоторые из холста не на экране. – weston

+0

Не думал об этом. –

+0

Когда я рисую прямоугольник на 0,110, height-110, width Он заполняет весь экран, за исключением границ 10 px. Что может привести к тому, что я должен добавить 100? –

ответ

1

Ваш код хорошо, ваш холст просто больше, чем текущий экран. Проверьте свой макет xml. Помните: координаты относительно холста, а не относительно видимой его части.

+0

Но я также сохраняю растровое изображение, и там у меня такая же проблема. http://i.imgur.com/Z5PYx89.jpg Растровое изображение, которое я сохраняю, такое же, что и на экране, поэтому холст не больше экрана, не так ли? –

+0

Можете ли вы предоставить макет? – Jan

+0

я добавил расположение к первоначальному вопросу –

0
Canvas canvas = new Canvas(bitmap); 

Вы генерация холста из растрового изображения, это означает, что растровое изображение может быть любого размера и не совсем та точка зрения.

Вы должны получить ширину/Heigh от View с GetWidth() и GetHeight()

+0

То, что вы предлагаете, что 3-й и 4-й Титулы являются ширина и высота прямоугольника рисовать, то есть по отношению к первым двум Params, но это не так, они являются абсолютными: [DrawRect (поплавок слева, плавать сверху, плавать вправо, плавать дно, краска краска)] (http://developer.android.com/reference/android/graphics/Canvas.html#drawRect (с плавающей точкой,% 20float,% 20float,% 20float,% 20android.graphics.Paint)) – weston

+0

Ох .. правда, я думал, что ltrb, но все еще сложно, это было правильно. Часть PS неправильна –

Смежные вопросы