对于那些喜欢这个问题的人,也给它一个赞成票
我正在使用一个扩展View
的类。在这个类中,我有 onDraw
方法来进行绘图。
当我启动我的应用程序时,除了一点烦人的事情之外,一切都按预期进行。每当我按屏幕上的任意位置时,绘图就会计算我触摸屏幕的坐标 - 并且应该绘制图像在这些精确的坐标中,将它们绘制得偏离我最初按下的位置。
例如,如果我在 x = 150、y = 250 处点击屏幕,图像将显示大量像素。
需要明确的是,当我按下屏幕时,我希望图像正好显示在我的手指下方或非常靠近我点击的位置,但是,图像通常显示在按下位置下方 100 个像素左右的位置。
使用canvas绘制时,是否有一些我不知道坐标的地方?
这是我的代码
public class PixelParticle extends View{
private float locationX;
private float locationY;
private int sizeX;
private int sizeY;
private Paint color;
private Rect rect;
private int paintcolor;
private float myLocX;
private float myLocY;
public PixelParticle(Context context, float locationX, float locationY, int sizeX, int sizeY, int paintcolor) {
super(context);
this.locationX = locationX;
this.locationY = locationY;
this.sizeX = sizeX;
this.sizeY = sizeY;
this.paintcolor = paintcolor;
rect = new Rect();
color = new Paint();
}
@Override
protected void onDraw(Canvas canvas){
super.onDraw(canvas);
Bitmap myBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
Bitmap resizedBitmap = Bitmap.createScaledBitmap(myBitmap, 250, 250, true);
canvas.drawBitmap(resizedBitmap,locationX ,locationY , null);
}
}
还有MainActivity..
public class MainActivity extends Activity {
private int pixelColor;
private float x;
private float y;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
x = event.getX();
y = event.getY();
pixelColor = Color.RED;
PixelParticle pp = new PixelParticle(this, x, y, 50, 50, pixelColor);
setContentView(pp);
return false;
}
}
最佳答案
屏幕的高度包括标题和通知栏。 将 Activity 设置为全屏并删除标题即可解决问题。 试试这个:
像素粒子...
public class PixelParticle extends View {
private float locationX;
private float locationY;
private int sizeX;
private int sizeY;
private Paint color;
private Rect rect;
private int paintcolor;
private float myLocX;
private float myLocY;
public PixelParticle(Context context, float locationX, float locationY,
int sizeX, int sizeY, int paintcolor) {
super(context);
this.locationX = locationX;
this.locationY = locationY;
this.sizeX = sizeX;
this.sizeY = sizeY;
this.paintcolor = paintcolor;
rect = new Rect();
color = new Paint();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Bitmap myBitmap = BitmapFactory.decodeResource(getResources(),
R.drawable.ic_launcher);
Bitmap resizedBitmap = Bitmap.createScaledBitmap(myBitmap, 250, 250,
true);
canvas.drawBitmap(resizedBitmap, locationX
- (resizedBitmap.getWidth() / 2),
locationY - (resizedBitmap.getHeight() / 2), null);
}}
主要 Activity ..
public class MainActivity extends Activity {
private int pixelColor;
private float x;
private float y;
PixelParticle pp ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
x = event.getX();
y = event.getY();
pixelColor = Color.RED;
pp = new PixelParticle(this, x, y, 50, 50, pixelColor);
setContentView(pp);
return false;
}}
关于java - Canvas 坐标不准确地显示我的位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22179385/