Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用onDraw()绘制的多个位图在曲面视图上进行Android缩放画布_Java_Android_Android Canvas_Scale_Surfaceview - Fatal编程技术网

Java 使用onDraw()绘制的多个位图在曲面视图上进行Android缩放画布

Java 使用onDraw()绘制的多个位图在曲面视图上进行Android缩放画布,java,android,android-canvas,scale,surfaceview,Java,Android,Android Canvas,Scale,Surfaceview,我有一个canvas/surfaceview,我正在绘制多个位图,以便用户能够在画布上的任何位置拖动和定位。我正在寻找一种方法来创建一个放大和缩小按钮,当选中该按钮时,可以切换画布50%的缩放比例 我的应用程序使用onDraw()方法在画布上绘制多个位图 我现在有一个功能,可以在切换缩放按钮时缩放每个位图,但问题是在缩放后让位图相对彼此对齐。我现在已经缩小了它们的结束x/y位置,但是通过缩小50%的大小,曾经彼此靠近的项目在缩小时就不再是这样了。我希望有一个解决方案,可以让我一次完成整个画布 如

我有一个canvas/surfaceview,我正在绘制多个位图,以便用户能够在画布上的任何位置拖动和定位。我正在寻找一种方法来创建一个放大和缩小按钮,当选中该按钮时,可以切换画布50%的缩放比例

我的应用程序使用onDraw()方法在画布上绘制多个位图

我现在有一个功能,可以在切换缩放按钮时缩放每个位图,但问题是在缩放后让位图相对彼此对齐。我现在已经缩小了它们的结束x/y位置,但是通过缩小50%的大小,曾经彼此靠近的项目在缩小时就不再是这样了。我希望有一个解决方案,可以让我一次完成整个画布

如果我需要分享一些代码,请让我知道

所有图形都发生在其中的SurfaceView类

public类BuildView扩展了SurfaceView实现了SurfaceHolder.Callback{

然后,非缩放绘图将以
canvas.drawBitmap(myBitmap,x,y,null);

这是我的oncreate方法,请注意BuildView gameView;正在初始化我的surfaceview类

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // Set full screen view
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
    WindowManager.LayoutParams.FLAG_FULLSCREEN);
     requestWindowFeature(Window.FEATURE_NO_TITLE);

     FrameLayout Game = new FrameLayout(this);
     LinearLayout GameWidgets = new LinearLayout (this);
     gameview = new BuildView(this, null);         
     //create buttons to lay over the surfaceview
     Button AddItemButton = new Button(this);
     //Button ZoomInButton = new Button(this);
     zoomButton = new Button(this);
     TextView MyText = new TextView(this);
     AddItemButton.setWidth(250);
     AddItemButton.setText("Add Item");
     AddItemButton.setId(1);
     AddItemButton.setOnClickListener(addItemHandler);
     MyText.setText("test");
     zoomButton.setWidth(250);
     zoomButton.setText("Zoom Out");
     zoomButton.setId(2);
     zoomButton.setOnClickListener(zoomHandler);
     // adding views to the main Game framelayout view * note the view "gameview" is the surface view that everything happens on
     GameWidgets.addView(AddItemButton); 
     GameWidgets.addView(zoomButton);
     Game.addView(gameview);
     Game.addView(GameWidgets); 

    int w=getWindowManager().getDefaultDisplay().getWidth()-25;
    int h=getWindowManager().getDefaultDisplay().getHeight()-25;
    gameview.wid = w; //set width and height in view
    gameview.hei = h;
    gameview.setWidthHeight(w, h);
    setContentView(Game); //trying this out
    gameview.updateImage(0, 0); //force bg change
    Log.i("views", "Added Game View");
    //setContentView(v);
}
因为这里有人要求我现在如何缩放位图,请注意,我正在寻找另一种缩放整个画布的方法方法,但完整方法在项目放置方面有更多的逻辑,在缩放之前,如果用户选择缩放,我会检查一个布尔标志,但我认为您不想筛选那么多代码,所以我只是将相关内容放在这里

protected void onDraw(Canvas canvas) { 
  float scaleHeight = getScaled(myBitmap.getHeight());
  float scaleWidth = getScaled(myBitmap.getWidth());                        

  scaler.postTranslate(-myBitmap.getWidth() / 4, -itemBit.getHeight() / 4); // Centers image
  scaler.postScale(scaleWidth, scaleHeight);
  Log.e("onDraw", "item not placed - scaler.postTranslate being called");
  scaler.postTranslate(itemX+myBitmap.getWidth()/2, itemY+myBitmap.getHeight()/2);
  canvas.drawBitmap(myBitmap, scaler, null);
}
这是我的getScaled函数

    float getScaled(int orig) {
    //return a scaled version
    int newScale = orig /2;
        float scaled = ((float) newScale) / orig;                           
    return scaled;
}

发布负责重新缩放的代码,以便其他人能够提供帮助。我目前没有重新缩放画布,我有一种缩放位图的方法,但我不想使用该方法。我只是使用矩阵缩放器。我希望缩放整个画布,而不仅仅是单个位图。谢谢。只是编辑以包含我的o我的surfaceView的nCreate()方法和onDraw()方法。