每次按下屏幕时如何绘制新的位图

时间:2017-06-08 16:32:50

标签: java android

我是android编程的新手。我试图在每次用户触摸屏幕时绘制一个新的位图图像。现在使用当前代码,它所做的就是更改位图所在的位置。它不会成为一个新的。我怎么能换新的?这是代码:

 public class MainDrawingView extends View {

    public float eventX;
    public float eventY;




    public AlertDialog.Builder alertThing;

    Context context = getContext();
   //Bitmaps
   public Bitmap redSquare;

    public String x;
    public String y;
   //Colors
   public boolean red = false;
   public boolean blue = false;
   //Squares
   public boolean topRight = false;
    public boolean topLeft = false;
    public boolean bottomLeft  = false;
    public boolean bottomRight = false;

    public int width = context.getResources().getDisplayMetrics().widthPixels;
    public int height = context.getResources().getDisplayMetrics().heightPixels;
    public int center  = height/2;
    public int widthDiv = width/2;


    private Paint paint  = new Paint();
    private Point pointStart  = new Point();
    private Point pointEnd =  new Point();

    public MainDrawingView(Context context, AttributeSet attrs){
        super(context, attrs);
        paint.setAntiAlias(true);
        paint.setStrokeWidth(5f);
        paint.setColor(Color.BLACK);
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeJoin(Paint.Join.ROUND);

        alertThing = new AlertDialog.Builder(context);


        //define bitmap
        redSquare = BitmapFactory.decodeResource(getResources(), R.drawable.red);



    }

    @Override
    public void onDraw(Canvas canvas){
        //canvas.drawPath(path, paint);
       canvas.drawLine(pointStart.x, pointStart.y, pointEnd.x, pointEnd.y,paint);
       //Makes a straight line go through the center of the screen.
       canvas.drawLine(0,height/2.5f, width,height/2.5f,paint);
       //Makes a straight line go up and down.
        canvas.drawLine(width/2.3f,0, width/2.3f, height,paint);




        //Chnages the square colors.

      //  top left combo
        if(topLeft){
         if(red){
             Toast.makeText(context,"jgjgjgjgjgjgjgjgjjg", Toast.LENGTH_SHORT).show();

            new Drawings(redSquare, canvas, eventX, eventY);

         }
        }



    }

    @Override
    public boolean onTouchEvent(MotionEvent event){
        //Gets the coords of the tap

         eventX = event.getX();
         eventY = event.getY();

        int pointX = Math.round(eventX);
        int pointY = Math.round(eventY);


        x = String.valueOf(eventX);
        y = String.valueOf(eventY);


        //This is the top left "square"
        if(eventY < center && eventX < widthDiv ){
            alertThing.setTitle("edit square");
            alertThing.setMessage("please choose an option");
            alertThing.setPositiveButton("red", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    topLeft = true;
                    red = true;




                    invalidate();

                }
            });
            alertThing.setNeutralButton("Chnange color to blue", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {

                }
            });

            alertThing.create();
            alertThing.show();
        }







        Toast.makeText(context, "center is :" +x, Toast.LENGTH_SHORT ).show();



        switch(event.getAction()){

            case MotionEvent.ACTION_DOWN:
                //Sets a new starting point
             pointStart.set(pointX,pointY);



               return true;

            case MotionEvent.ACTION_UP:
                //Contects the points
              pointEnd.set(pointX,pointY);
                break;




            default:
                return false;
        }
        invalidate();
        return true;
    }





}

这是绘制位图的Drawings类:

public class Drawings {






  public Drawings(Bitmap bitmap, Canvas canvas,float x, float y){




       canvas.drawBitmap(bitmap, x,y,null);


    }
}

1 个答案:

答案 0 :(得分:1)

你真的应该看到canvas.drawBitmap does.当然它会改变位置,因为触摸位置也会发生变化。

您可以像定义位图时一样创建新的位图。

但是在onDraw中创建新对象会非常慢。