Android-switching control location: LayoutParams-Based Instant switching and ObjectAnimator-based animation effect switching

Source: Internet
Author: User

Android-switching control location: LayoutParams-Based Instant switching and ObjectAnimator-based animation effect switching

Now we need to exchange two controls (two RelativeLayout in this article) and find two methods:

1. LayoutParams is used to change the attributes of the two layout, that is, its relative relationship (such as below), to achieve location switching. However, it does not have an animated Effect of switching, which is an "instant" exchange.

2. I used animation to swap the control location to achieve the animation effect I needed.

 

For example, exchange layoutOne and layoutTwo.

 

 

1. First, we will introduce how to use LayoutParams.

 

 

package com.exchange;import com.exchange.R;import android.app.Activity;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.RelativeLayout;import android.widget.Toast;/* * Exchange layout with LayoutParams * Author : likun@stu.zzu.edu.cn * Date: 2015/7/15 */public class ParamsExchangeActivity extends Activity {private Button btnEx;private LayoutInflater inflater;private RelativeLayout myFirst,mySecond,layoutOne,layoutTwo;//set controls' id , the id is random as you like , do NOT use zeroprivate int btnExId = 11;private int layoutOneId  = 12;private int layoutTwoId   = 13;//exchange flag , in order to swap back and forthprivate boolean TAG_firstLayoutTop;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.layout_main);                btnEx=(Button)findViewById(R.id.button_exchange);                btnEx.setOnClickListener(new BtnExOnClickListener());        inflater=getLayoutInflater();                  TAG_firstLayoutTop = true;                //init layoutOne        myFirst = (RelativeLayout) inflater.inflate(                R.layout.layout_first, null).findViewById(R.id.myFirst);                layoutOne = (RelativeLayout)findViewById(R.id.LayoutOne);        layoutOne.removeAllViews();        layoutOne.addView(myFirst);                //init layoutTwo        mySecond = (RelativeLayout) inflater.inflate(                R.layout.layout_second, null).findViewById(R.id.mySecond);            layoutTwo = (RelativeLayout)findViewById(R.id.LayoutTwo);        layoutTwo.removeAllViews();        layoutTwo.addView(mySecond);            }        public class BtnExOnClickListener implements OnClickListener    {    @Override    public void onClick(View v){    Toast.makeText(getBaseContext(), exchange!, Toast.LENGTH_SHORT).show();        //set id for controls in order to change their Params    btnEx.setId(btnExId);    layoutOne.setId(layoutOneId);     layoutTwo.setId(layoutTwoId);        RelativeLayout.LayoutParams params;    if(TAG_firstLayoutTop){    params = (RelativeLayout.LayoutParams)layoutTwo.getLayoutParams();    params.removeRule(RelativeLayout.BELOW);//remove the exist 'BELOW' rule    params.addRule(RelativeLayout.BELOW,11);//add a new one 'BELOW' rule,below control NO. 11    layoutTwo.setLayoutParams(params);        params = (RelativeLayout.LayoutParams)layoutOne.getLayoutParams();    params.removeRule(RelativeLayout.BELOW);    params.addRule(RelativeLayout.BELOW,13);//below control NO. 13    layoutOne.setLayoutParams(params);        TAG_firstLayoutTop=false;// change the flag    }else{    //vice versa    params = (RelativeLayout.LayoutParams)layoutOne.getLayoutParams();    params.removeRule(RelativeLayout.BELOW);    params.addRule(RelativeLayout.BELOW,11);    layoutOne.setLayoutParams(params);        params = (RelativeLayout.LayoutParams)layoutTwo.getLayoutParams();    params.removeRule(RelativeLayout.BELOW);    params.addRule(RelativeLayout.BELOW,12);    layoutTwo.setLayoutParams(params);        TAG_firstLayoutTop=true;    }    }        }}


 

Ii. Use the animation Exchange Control

The method of using animation exchange is very simple:

 

    ObjectAnimator.ofFloat(layoutTwo, TranslationY, -300).setDuration(1000).start();    ObjectAnimator.ofFloat(layoutOne, TranslationY, 300).setDuration(1000).start();    

The Code is as follows:

 

 

package com.exchange;import android.animation.ObjectAnimator;import android.app.Activity;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.RelativeLayout;import android.widget.Toast;public class AnimExchangeActivity extends Activity {private Button btnEx;private LayoutInflater inflater;private RelativeLayout myFirst,mySecond,layoutOne,layoutTwo;private boolean TAG_firstLayoutTop;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.layout_main);                btnEx=(Button)findViewById(R.id.button_exchange);                btnEx.setOnClickListener(new BtnExOnClickListener());        inflater=getLayoutInflater();                  TAG_firstLayoutTop = true;                //init layoutOne        myFirst = (RelativeLayout) inflater.inflate(                R.layout.layout_first, null).findViewById(R.id.myFirst);                layoutOne = (RelativeLayout)findViewById(R.id.LayoutOne);        layoutOne.removeAllViews();        layoutOne.addView(myFirst);                //init layoutTwo        mySecond = (RelativeLayout) inflater.inflate(                R.layout.layout_second, null).findViewById(R.id.mySecond);            layoutTwo = (RelativeLayout)findViewById(R.id.LayoutTwo);        layoutTwo.removeAllViews();        layoutTwo.addView(mySecond);            }        public class BtnExOnClickListener implements OnClickListener    {    @Override    public void onClick(View v){    Toast.makeText(getBaseContext(), exchange!, Toast.LENGTH_SHORT).show();        if(TAG_firstLayoutTop){    //move upward and downward 300    ObjectAnimator.ofFloat(layoutTwo, TranslationY, -300).setDuration(1000).start();    ObjectAnimator.ofFloat(layoutOne, TranslationY, 300).setDuration(1000).start();    TAG_firstLayoutTop = false;    }else{    //back to normal position    ObjectAnimator.ofFloat(layoutOne, TranslationY, 0).setDuration(1000).start();    ObjectAnimator.ofFloat(layoutTwo, TranslationY, 0).setDuration(1000).start();    TAG_firstLayoutTop = true;    }        }        }}

 

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.