Search code examples
androidresolutionscreen-size

android move image from one place to another place on different screen size and resolutions


I am new in android. I want to make ludo game. and I sets all things related to this game. but I want to move TOKEN from one place to another for different screens like (Nexus 6, Samsung Note 5, Moto G3, etc...). But issue is that for every screen size (Width x Height) are different. that's why I am not set proper x and y position on screen. I referenced screen Height and Width for taking next position (x and y) on screen to move TOKEN on screen. I am taking static image for Ludo Dashboard. That's why i am not getting how to move.

for example: My Screen is as below,

enter image description here

  1. from origin position to Home position : In this situation, for every screens translation was changed. because i am taking reference screen Height and Width for move. for that code is below,

    DisplayMetrics displaymetrics = getResources().getDisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
    this.constant.Height = displaymetrics.heightPixels;
    this.constant.Width = displaymetrics.widthPixels;
    
    private float getheight(float val) {
        return (this.constant.Height * val) / 800;
    }
    
    private float getwidth(float val) {
        return (this.constant.Width * val) / 480;
    }
    
    ObjectAnimator animTranslateY = ObjectAnimator.ofFloat(img,
            "translationY", blue_1.getY() + getheight(67));
    animTranslateY.setDuration(GameConstants.DURATION);
    
    ObjectAnimator animTranslateX = ObjectAnimator.ofFloat(img,
            "translationX", blue_1.getX() + getwidth(128));
    animTranslateX.setDuration(GameConstants.DURATION);
    
    AnimatorSet anim = new AnimatorSet();
    anim.addListener(new Animator.AnimatorListener() {
        @Override
        public void onAnimationStart(Animator animator) {
        }
    
        @Override
        public void onAnimationEnd(Animator animator) {
    
        }
    
        @Override
        public void onAnimationCancel(Animator animator) {
    
        }
    
        @Override
        public void onAnimationRepeat(Animator animator) {
    
        }
    });
    
    anim.play(animTranslateX);
    anim.play(animTranslateY);
    anim.start();
    
  2. from Home to Common Rout : In this situation, its work fine. bt for different screen its moving differ.

So, my question is that How can i move and what should be reference for move image form one position to another position. I takes too many time for this. Please help me.


Solution

  • So, I tried to come up with a solution that uses simple unitary method to solve your problem. I am not sure if it works, I did not try it by coding it actually!

    I am assuming that you have set the background static image to scale its size (width) to 100% of the screen, your static image is a square(usually a ludo board is). Also I am considering here that screenwidth is smaller than screenheight. If it is the other way around then exchange the formulae symbols.

    let

    screenH = screen height in pixels;
    screenW = screen width in pixels;
    
    bgW = width of staticbackgroundimage in pixels;
    bgH = height of staticbackgroundimage in pixels;
    

    so now, if you want to move 'p' pixels in the background static ludo image horizontally then let us say you will have to move x pixels on the screen. x can be calculated as follows:

    x= p*screenW/bgW;
    

    Also, if you want to move 'q' pixels in the background static ludo image vertically then let us say you will have to move y pixels on the screen. y can be calculated as follows:

    image height on the screen will be(in pixels):

    screenHimage=bgH*screenW/bgW;
    
    y=q*screenHimage/bgH;
    

    So now move x and y pixels on the screen if you want to move p and q pixels in the original image. I hope this works.