通过代码在图像上绘制矩形

时间:2011-10-20 08:04:30

标签: android draw

我有这个xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent" android:background="@drawable/photo0"
    android:id="@+id/imagBackground">

    <TextView android:layout_width="20dip" android:layout_height="20dip"
        android:layout_marginLeft="250dip" android:layout_marginTop="15dip" android:background="#FFFFFF"
        android:id="@+id/index" android:text="0" android:textColor="#000000">
        </TextView>

        <ImageView android:layout_marginTop="280dip"
            android:layout_width="fill_parent" android:layout_height="wrap_content"
            android:background="@drawable/anim_ctrl_panel" android:id="@+id/change">
        </ImageView>
</LinearLayout>

并且我必须通过代码绘制一些矩形。怎么做?

我试过了:

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        layout = (LinearLayout) findViewById(R.id.imagBackground);
        changeImage = (ImageView) findViewById(R.id.change);
        index = (TextView) findViewById(R.id.index);

        draw();
    }

        private void draw() {
        System.out.println("desenam");
        int width = 50;
        int height = 100;

        Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);

        Paint paint = new Paint();
        paint.setColor(Color.BLUE);


        Canvas canvas = new Canvas(bitmap);

        canvas.drawColor(Color.RED);

        canvas.drawRect(25, 50, 75, 150, paint);
         ImageView imageView = new ImageView(this);


        imageView.setImageBitmap(bitmap);

         layout.addView(imageView);

        setContentView(layout);
    }

但是矩形在屏幕的底部。如何设置放置它们的位置?

4 个答案:

答案 0 :(得分:5)

我的猜测是,它位于页面底部的原因是因为LinearLayout:最终你将有3个孩子:TextView,ImageView和ImageView,都在彼此之下。

一些可能的解决方案:

  1. 在LinearLayout中添加一个FrameLayout并在其中添加ImageViews,因此层次结构将为:

    • 的LinearLayout
      • 的TextView
      • 的FrameLayout
        • ImageView的
        • ImageView的
  2. 使用RelativeLayout而不是LinearLayout,并将第二个ImageView的所有边缘与第一个对齐

  3. 创建一个自定义ImageView类,例如“com.foo.bar.MyImageView”,它当然扩展了ImageView。覆盖onDraw:

    public void onDraw(Canvas canvas) {
        super.onDraw(canvas); // This will render the original image
        // ... and here you can have the code to render the rectangle
    }
    
  4. 在xml中替换

     <ImageView ...
    

     <com.foo.bar.MyImageView ...
    

    我会选择最后的解决方案,因为从性能的角度来看,它是最好的。

答案 1 :(得分:0)

试试这段代码:

        Point left=new Point(x, y);

        paint.setColor(Color.parseColor("#00CCFF"));
        paint.setStyle(Style.FILL);
        canvas.drawCircle(left.x, left.y, 9, paint);

所以你必须使用像素创建一个Point然后在它周围绘制一个矩形,否则它不知道在哪里绘制

答案 2 :(得分:0)

为什么不在布局文件中执行此操作:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:background="@drawable/photo0"
android:id="@+id/imagBackground">

<LinearLayout android:layout_width="fill_parent"
        android:layout_height="fill_parent" android:background="@android:color/darker_gray">
 <LinearLayout android:layout_width="fill_parent"
 android:layout_margin="5dip"
        android:layout_height="fill_parent"              android:background="@android:color/black">
<TextView android:layout_width="20dip" android:layout_height="20dip"
    android:layout_marginLeft="250dip" android:layout_marginTop="15dip" android:background="#FFFFFF"
    android:id="@+id/index" android:text="0" android:textColor="#000000">
    </TextView>

    <ImageView android:layout_marginTop="280dip"
        android:layout_width="fill_parent" android:layout_height="wrap_content"
        android:background="@drawable/anim_ctrl_panel" android:id="@+id/change">
    </ImageView>
</LinearLayout>
            </LinearLayout>
</LinearLayout>

答案 3 :(得分:0)

尝试将LinearLayout更改为:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent" 
    android:gravity="top" android:layout_gravity="top"
    android:layout_height="fill_parent" android:background="@drawable/photo0"
    android:id="@+id/imagBackground">
...