使用onDraw()绘制多个位图的java Android在曲面视图上放大缩小画布
我有一个canvas/surfaceview,我正在绘制多个位图,以便用户能够在画布上的任何位置拖动和定位。我正在寻找一种方法来创建一个放大和缩小按钮,当选中该按钮时,可以切换画布50%的缩放比例
我的应用程序使用onDraw()方法在画布上绘制多个位图
我现在有一个功能,可以在切换缩放按钮时缩放每个位图,但问题是在缩放后让位图相对彼此对齐。我现在已经缩小了它们的结束x/y位置,但是通过缩小50%的大小,曾经彼此靠近的项目在缩小时就不再是这样了。我希望有一个解决方案,可以让我一次完成整个画布
如果我需要分享一些代码,请让我知道
所有图形都发生在其中的SurfaceView类
public class BuildView extends SurfaceView implements 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);
}
因为这里有人要求我现在如何缩放位图,请注意,我正在寻找另一种缩放整个画布的方法。下面是我的onDraw()方法的细节,但是full方法在项目放置方面有更多的逻辑,在缩放之前,如果用户选择了缩放,我会检查一个布尔标志,但我想你不想筛选那么多代码,所以我只在这里放一些相关的东西
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;
}
共 (0) 个答案