Line没有在android中的Imageview上绘图

时间:2015-01-06 09:15:16

标签: android imageview

我想在Imageview上绘制一条线。例如,当我们选择一个特定的文本时,文本在一行下变色。这是我的代码。我无法看到该行。以及如何增加此宽度线

protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_next);
             imageView=(ImageView)findViewById(R.id.imageView1);
             bitmap  = getIntent().getExtras().getParcelable("name");
             Display currentDisplay = getWindowManager().getDefaultDisplay();
                float dw = currentDisplay.getWidth();
                float dh = currentDisplay.getHeight();

            //bitmap1 = Bitmap.createBitmap((int) dw, (int) dh,Bitmap.Config.ARGB_8888);
               bitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true);

             canvas = new Canvas(bitmap);
                paint = new Paint();
                paint.setColor(Color.WHITE);
                imageView.setImageBitmap(bitmap);
            //for co-ordinate of the selected part of the image
            imageView.setOnTouchListener(new OnTouchListener(){

                   @Override
                   public boolean onTouch(View v, MotionEvent event) {

                    int action = event.getAction();
                     x1 = (int) event.getX();
                     y1 = (int) event.getY();
                     x2 = (int) event.getX();
                     y2 = (int) event.getY();
                    switch(action){
                    case MotionEvent.ACTION_DOWN:
                     System.out.println("x1-cordinate"+x1+"y1-cordinate"+y1);
                     //startPt = projectXY((ImageView)v, bitmapMaster, x, y);
                     xstart=x1;
                     ystart=y1;
                     break;
                   /* case MotionEvent.ACTION_MOVE:
                     textSource.setText("ACTION_MOVE- " + x + " : " + y);
                     drawOnRectProjectedBitMap((ImageView)v, bitmapMaster, x, y);
                     break;*/
                    case MotionEvent.ACTION_UP:
                     System.out.println("x2-cordinate"+x2+"y2-cordinate"+y2);
                     canvas.drawLine(xstart, ystart, x2, y2, paint);
                      imageView.invalidate();
                     //drawOnRectProjectedBitMap((ImageView)v, bitmapMaster, x, y);
                     finalizeDrawing();
                     break;
                    }
                    /*
                     * Return 'true' to indicate that the event have been consumed.
                     * If auto-generated 'false', your code can detect ACTION_DOWN only,
                     * cannot detect ACTION_MOVE and ACTION_UP.
                     */
                    return true;
                   }});`

2 个答案:

答案 0 :(得分:0)

我想你想要像this answer这样的东西。

它将显示如下

enter image description here

答案 1 :(得分:0)

`

Button btnLoadImage;
 TextView textSource, textInfo;
 ImageView imageResult;

 final int RQS_IMAGE1 = 1;

 Uri source;
 Bitmap bitmapMaster;
 Canvas canvasMaster;


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

  btnLoadImage = (Button)findViewById(R.id.loadimage);
  textSource = (TextView)findViewById(R.id.sourceuri);
  imageResult = (ImageView)findViewById(R.id.result);

  btnLoadImage.setOnClickListener(new OnClickListener(){

   @Override
   public void onClick(View arg0) {
    Intent intent = new Intent(Intent.ACTION_PICK,
      android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    startActivityForResult(intent, RQS_IMAGE1);
   }});

  imageResult.setOnTouchListener(new OnTouchListener(){

   @Override
   public boolean onTouch(View v, MotionEvent event) {

    int action = event.getAction();
    int x = (int) event.getX();
    int y = (int) event.getY();
    switch(action){
    case MotionEvent.ACTION_DOWN:
     textSource.setText("ACTION_DOWN- " + x + " : " + y);
     drawOnProjectedBitMap((ImageView)v, bitmapMaster, x, y);
     break;
    case MotionEvent.ACTION_MOVE:
     textSource.setText("ACTION_MOVE- " + x + " : " + y);
     drawOnProjectedBitMap((ImageView)v, bitmapMaster, x, y);
     break;
    case MotionEvent.ACTION_UP:
     textSource.setText("ACTION_UP- " + x + " : " + y);
     drawOnProjectedBitMap((ImageView)v, bitmapMaster, x, y);
     break;
    }
    /*
     * Return 'true' to indicate that the event have been consumed.
     * If auto-generated 'false', your code can detect ACTION_DOWN only,
     * cannot detect ACTION_MOVE and ACTION_UP.
     */
    return true;
   }});

 }

 /*
  * Project position on ImageView to position on Bitmap
  * draw on it
  */
 private void drawOnProjectedBitMap(ImageView iv, Bitmap bm, int x, int y){
  if(x<0 || y<0 || x > iv.getWidth() || y > iv.getHeight()){
   //outside ImageView
   return;
  }else{
   int projectedX = (int)((double)x * ((double)bm.getWidth()/(double)iv.getWidth()));
   int projectedY = (int)((double)y * ((double)bm.getHeight()/(double)iv.getHeight()));

   Paint   paint = new Paint();
            paint.setStyle(Paint.Style.FILL);
            paint.setColor(Color.WHITE);
            paint.setStrokeWidth(3);
   canvasMaster.drawCircle(projectedX, projectedY, 5, paint);
   imageResult.invalidate();

   textSource.setText(x + ":" + y + "/" + iv.getWidth() + " : " + iv.getHeight() + "\n" +
     projectedX + " : " + projectedY + "/" + bm.getWidth() + " : " + bm.getHeight()
     );
  }
 }

 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  super.onActivityResult(requestCode, resultCode, data);

  Bitmap tempBitmap;

  if(resultCode == RESULT_OK){
   switch (requestCode){
   case RQS_IMAGE1:
    source = data.getData();
    textSource.setText(source.toString());

    try {
     //tempBitmap is Immutable bitmap,
     //cannot be passed to Canvas constructor
     tempBitmap = BitmapFactory.decodeStream(
       getContentResolver().openInputStream(source));

     Config config;
     if(tempBitmap.getConfig() != null){
      config = tempBitmap.getConfig();
     }else{
      config = Config.ARGB_8888;
     }

     //bitmapMaster is Mutable bitmap
     bitmapMaster = Bitmap.createBitmap(
       tempBitmap.getWidth(),
       tempBitmap.getHeight(),
       config);

     canvasMaster = new Canvas(bitmapMaster);
     canvasMaster.drawBitmap(tempBitmap, 0, 0, null);

     imageResult.setImageBitmap(bitmapMaster);
    } catch (FileNotFoundException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }

    break;
   }
  }
 }

}`free draw on bitmap跟随此链接,现在我可以在ImageView上方绘制线条