java - Canvas 坐标不准确地显示我的位图

标签 java android coordinates android-canvas ondraw

对于那些喜欢这个问题的人,也给它一个赞成票

我正在使用一个扩展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/

相关文章:

java - 可以拥有监视器或锁是否正确?

android - 在 Android Activity 类中存储数据数组

sql-server-2008 - 根据计算的坐标之间的距离选择数据

android - 使应用程序警报对话框看起来像 Play Services Location Enable 对话框?

Android ImageView - 无论滚动位置或缩放比例如何,都获取点击(单击)的坐标

SVG 绝对坐标?

java - com.sun.mail.smtp.SMTPSendFailedException : 530-5. 5.1 需要身份验证

java - OpenCms 10 内容存储在数据库中

java - 朱尼特 : Runlistener overriden method (testFinished) not called when running a Parameterized test

android - SimpleCursorAdapter中如何绑定(bind)联系人姓名、电话、联系人照片?