2015-01-08 5 views
0

Я пытаюсь создать прямоугольник внутри холста, чтобы он отображался в правой части экрана, но приложение, кажется, разбивается каждый раз, когда я запускаю его. Я серьезно не знаю, что я делаю неправильно здесь +, что нужно изменить в моем коде?Прямоугольник не отображается справа

activity_main.xml

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    tools:context=".MainActivity"> 

    <TextView android:text="@string/hello_world" android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

    <com.apptacularapps.customview.DrawView 
     android:id="@+id/diagram" 
     android:layout_width="fill_parent" 
     android:layout_height="52dp" /> 

</LinearLayout> 

MainActivity.java

import android.graphics.Color; 
import android.os.Bundle; 
import android.support.v7.app.ActionBarActivity; 
import android.view.Menu; 
import android.view.MenuItem; 

public class MainActivity extends ActionBarActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     DrawView drawView = new DrawView(this); 
     drawView.setBackgroundColor(Color.BLACK); 
     setContentView(drawView); 
    } 
} 

DrawView.java

import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.graphics.Point; 
import android.view.Display; 
import android.view.View; 
import android.view.WindowManager; 

public class DrawView extends View { 
    Paint paint = new Paint(); 
    Context context; 

    public DrawView(Context context) { 
     super(context); 
     this.context = context; 
    } 

    @Override 
    public void onDraw(Canvas canvas) { 

     //Code to Measure the Screen width in pixels 

     WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); 
     Display display = wm.getDefaultDisplay(); 
     Point size = new Point(); 
     display.getSize(size); 
     int width = size.x; 

     paint.setColor(Color.RED); 
     canvas.drawRect(0, 0, 5, canvas.getHeight(), paint); 

     paint.setColor(Color.RED); 
     canvas.drawRect(canvas.getWidth()-width, 0, 5, canvas.getHeight(), paint); 
    } 
} 
+6

Crash? Отправьте свой логарифм, пожалуйста, я забыл свой хрустальный шар этим утром ... – shkschneider

+2

Зачем нам скриншоты вашей среды разработки и прекращение сообщения? – weston

+0

Зачем задавать такой вопрос? – MacaronLover

ответ

0

Мой предыдущий ответ был из-за моего отсутствия понимания проблемы. Извините за причиненные неудобства, если они есть. Я не уверен, могу ли я вам помочь, но попробуйте это.

public void onDraw(Canvas canvas) { 

    //Code to Measure the Screen width in pixels 

    WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); 
    Display display = wm.getDefaultDisplay(); 
    Point size = new Point(); 
    display.getSize(size); 
    int width = size.x; 

    paint.setColor(Color.RED); 
    canvas.drawRect(0, 0, 5, canvas.getHeight(), paint); 

    paint.setColor(Color.RED); 
    canvas.drawRect(canvas.getWidth()-width, 0, 5, canvas.getHeight(), paint); 
} 

В приведенном выше фрагменте кода, в последней строке, вместо canvas.getWidth()-width типа canvas.getWidth()-(float) width. Поскольку ширина равна integer, а canvas.getWidth() возвращает float, а float-int возвращает возвращаемое число с плавающей запятой.

Проверьте значение width. Это так, как ожидалось? Также попробуйте вручную установить ширину значения и проверьте, не исчезла ли проблема.

Надеюсь, что это поможет и решает проблему!

Посмотрите на this question and its accepted answer.

+0

Что должно быть по этому поводу и почему? – MacaronLover

+0

Мои прямоугольники определяются в java не xml – MacaronLover

+0

Мой прямоугольник равен только 5dp (как указано в моем коде) – MacaronLover

0

попробовать это ..

<com.example.mystackoverflow.MyView 
    android:id="@+id/myview" 
    android:layout_width="match_parent" 
    android:layout_height="100dp" 
    android:layout_alignParentTop="true" /> 

MyView класс

public class MyView extends View { 

private Paint mPaint; 
private int view_width, view_height; 

public MyView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    mPaint = new Paint(); 
    mPaint.setColor(getResources().getColor(color.Red)); 
    mPaint.setFlags(Paint.ANTI_ALIAS_FLAG); 
} 

@Override 
protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 
    //canvas.drawRect(0, 0, view_width, view_height, mPaint); 
     canvas.drawRect(view_width/2, 0, view_width, view_height, mPaint); 
} 

@Override 
protected void onLayout(boolean changed, int left, int top, int right, int bottom) { 
    super.onLayout(changed, left, top, right, bottom); 
    view_width = right - left; 
    view_height = bottom - top; 
} 

}

+0

Нет. Мой прямоугольник должен быть шириной 5 пикселей, поэтому использование ширины представления не поможет +. Я хочу, чтобы ширина и высота моего представления оставались неизменными + цвет, чтобы оставаться неизменным. – MacaronLover

+0

ширина и высота согласно вашему требованию вы можете изменить .... – KomalG

+0

Я не хочу менять любой из этого Комала. Все, что я хочу, это рисовать прямоугольник справа. 'Paint.setColor (Color.RED); canvas.drawRect (0, 0, 5, canvas.getHeight(), paint); 'Этот код рисует его слева, поэтому, очевидно, что-то здесь нужно изменить. Как насчет первого номера слева? В конце концов, он представляет пиксели слева. – MacaronLover

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