1

imageViewがあり、座標配列に従ってimageViewに図を描画します。すべての図にはonclickイベントがあります。Activity.java

package com.example.floorexhibitiontest;
import com.floor.DrawView;
import android.app.Activity;
import android.os.Bundle;
import android.widget.LinearLayout;
public class HallActivity extends Activity {@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.hall);
    }

    float[][][] points = new float[][][] {
        {
            {213,264},
            {247,232},
            {345,338},
            {310,371}
        },
        {
            {171,305},
            {205,272},
            {302,373},
            {267,406}
        },
        {
            {571,320},
            {606,320},
            {606,428},
            {571,428}
        }
    };

    LinearLayout layout = (LinearLayout)findViewById(R.id.root);
    final DrawView draw = new DrawView(this,points);
    layout.addView(draw);       
}

DrawView.java

package com.floor;
import com.example.floorexhibitiontest.R;

import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Path;
import android.graphics.Paint.Style;
import android.graphics.Shader.TileMode;
import android.graphics.Shader;
import android.util.DisplayMetrics;
import android.view.View;

public class DrawView extends View{
    private float[][][] points = null;
    DisplayMetrics metric = new DisplayMetrics();

    public DrawView(Context context,float[][][] p) {
        super(context);
        metric = context.getApplicationContext().getResources().getDisplayMetrics();
        points = p;
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        float density=metric.density;  

        for(int i = 0; i < points.length; i++){
            Paint p = new Paint();
            p.setAntiAlias(true);
            p.setColor(Color.BLUE);
            Path path=new Path();
            path.moveTo(points[i][0][0] / density, points[i][0][1] / density);
            path.lineTo(points[i][1][0] / density, points[i][1][1] / density);
            path.lineTo(points[i][2][0] / density, points[i][2][1] / density);
            path.lineTo(points[i][3][0] / density, points[i][3][1] / density);

            path.close();
            p.setStyle(Style.STROKE);
            canvas.drawPath(path, p);
        }
    }
}

現在の効果: ここに画像の説明を入力してください

  1. 描画された各長方形に独自のonclickイベントを生成させるにはどうすればよいですか?
  2. レイアウトファイルにImageViewがあります。私の目的は、ImageViewにグラフィックペイントを配置することです。しかし、結果はImageViewが表示できることです。ペイントされたグラフィックは表示できません。ImageViewを非表示にすると、画像を表示できます。

みんなの助けを求めてください。アドバイスありがとうございます。

4

1 に答える 1

0

次のようにしてみてください:

public boolean onTouch(View v, MotionEvent event) {
   if((event.getX(0)>=x_coord) && 
      (event.getY(0)>=y_coord) && 
     ( event.getX(0)<=x_coord + your_rectangle_width) && 
      (event.getY(0)<=y_coord + your_rectangle_heigth))
      {
          //rectangle selected
      }
   return true;
}

または onTouch() で points[] 配列からの実際の座標を使用します

于 2012-12-18T09:08:05.280 に答える