【问题标题】:Rectangle not appearing on the right矩形没有出现在右边
【发布时间】:2015-01-08 12:58:04
【问题描述】:

我正在尝试在画布中创建一个矩形,以便它出现在屏幕的右侧,但应用程序似乎在我每次运行时都会崩溃。我真的不知道我在这里做错了吗+我的代码需要改变什么?

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 );
    }
}

【问题讨论】:

  • 崩溃?请张贴你的logcat,我今天早上忘记了我的水晶球......
  • 为什么我们需要您的开发环境和停止消息的屏幕截图?
  • 为什么要问这样的问题?

标签: java android xml android-activity


【解决方案1】:

我之前的回答是因为我对你的问题缺乏了解。如有不便,敬请见谅。我不确定我是否能帮助你,但试试这个。

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()-(float) width,而不是canvas.getWidth()-width。因为宽度是integer 并且canvas.getWidth() 返回float 而float-int 返回一个循环浮点数。

检查width 的值。是否如预期的那样?还可以尝试手动设置值宽度,看看问题是否仍然存在。

希望这有助于解决问题!

看看this question and its accepted answer

【讨论】:

  • 对此应该有什么,为什么?
  • 我的矩形是在 java 中定义的而不是 xml
  • 我的矩形宽度只有 5dp(如我的代码中所述)
  • 它不起作用。我剩下的就是:(查看最新的模拟器截图)
  • 我想要实现的是这个(Final期望结果下的图像),所以如果你认为有更好/更有效的方法,那么请让我知道。非常感谢。 :-)
【解决方案2】:

试试这个..

<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;
}

}

【讨论】:

  • 不。我的矩形需要 5 像素宽,因此使用视图宽度无济于事 + 我希望视图的宽度和高度保持不变 + 颜色也保持不变。
  • 我不想改变任何 Komal。我想要的只是在右侧绘制矩形。 paint.setColor(Color.RED); canvas.drawRect(0, 0, 5, canvas.getHeight(), paint ); 此代码将其绘制在左侧,因此显然这里需要更改。左边第一个数字呢?毕竟,它代表的是左边的像素。
  • 你想要多少宽度.....你试过我的代码吗?一旦尝试它,您可以根据您的要求更改布局中的 myview。在 onLayout 我正在计算来自 xml 布局的视图宽度和高度...
  • 我希望矩形的宽度为 5,并且我希望我的视图具有屏幕的宽度 (fill_parent)。稍后我将添加更多形状。
  • 不要忘记使像素独立于分辨率。有关更多信息,请参阅 DisplayMetrics。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多