Cambiar la altura y el ancho de EditText en Runtime con alguna animación

Tengo cuatro EditText con diverso fondo. Se parece a esto: Introduzca aquí la descripción de la imagen

Quiero cubrir la pantalla completa cuando un EditText se selecciona con That EditText. Para eso necesito cambiar el anchura y la altura de EditText con una cierta animación en tiempo de ejecución.

Cuando se selecciona Debe tener este aspecto: Introduzca aquí la descripción de la imagen

¿Cómo puedo cambiar el tamaño de EditText con animación en tiempo de ejecución?

No estoy seguro de si se puede hacer con Animations . En la vista de Android se tarda todo el espacio antes de terminar la animación, por lo que verá que otros editTexts desaparece y selecciona uno que aumenta lentamente. Aquí está el ejemplo aproximado cómo hacerlo sin animaciones estándar, pero cambiando pesos en hilo separado:

diseño:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <LinearLayout android:id="@+id/ll0" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="1" android:orientation="horizontal" > <EditText android:id="@+id/et00" android:layout_width="0dp" android:layout_height="fill_parent" android:layout_weight="1" android:gravity="top|left" android:text="00" /> <EditText android:id="@+id/et01" android:layout_width="0dp" android:layout_height="fill_parent" android:layout_weight="1" android:gravity="top|left" android:text="01" /> </LinearLayout> <LinearLayout android:id="@+id/ll1" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="1" android:orientation="horizontal" > <EditText android:id="@+id/et10" android:layout_width="0dp" android:layout_height="fill_parent" android:layout_weight="1" android:gravity="top|left" android:text="10" /> <EditText android:id="@+id/et11" android:layout_width="0dp" android:layout_height="fill_parent" android:layout_weight="1" android:gravity="top|left" android:text="11" /> </LinearLayout> </LinearLayout> 

Y en código añadir acciones en el cambio de enfoque:

 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); OnFocusChangeListener focusListener = new OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if (hasFocus) { LinearLayout parent = (LinearLayout) v.getParent(); EditText forDecresing = null; for (int i = 0; i < parent.getChildCount(); i++) { if (parent.getChildAt(i) != v) { forDecresing = (EditText) parent.getChildAt(i); break; } } LinearLayout pp = (LinearLayout) parent.getParent(); LinearLayout layoutForDecreasing = null; for (int i = 0; i < pp.getChildCount(); i++) { if (pp.getChildAt(i) != parent && pp.getChildAt(i) instanceof LinearLayout) { layoutForDecreasing = (LinearLayout) pp.getChildAt(i); break; } } startAnimation((EditText) v, forDecresing, layoutForDecreasing, parent); } else { } } }; ((EditText) findViewById(R.id.et00)).setOnFocusChangeListener(focusListener); ((EditText) findViewById(R.id.et01)).setOnFocusChangeListener(focusListener); ((EditText) findViewById(R.id.et11)).setOnFocusChangeListener(focusListener); ((EditText) findViewById(R.id.et10)).setOnFocusChangeListener(focusListener); } public void onBackPressed() { setWeight(findViewById(R.id.et00), 1); setWeight(findViewById(R.id.et01), 1); setWeight(findViewById(R.id.et11), 1); setWeight(findViewById(R.id.et10), 1); setWeight(findViewById(R.id.ll1), 1); setWeight(findViewById(R.id.ll0), 1); } Thread animationThread; private void startAnimation(final EditText forIncreasing, final EditText forDecresing, final LinearLayout layoutForDecreasing, final LinearLayout layoutForIncreasing) { if (animationThread != null) animationThread.interrupt(); animationThread = new Thread(new Runnable() { @Override public void run() { int iterations = 0; int maxIterations = 30; setWeight(forIncreasing, maxIterations - 1); setWeight(layoutForIncreasing, maxIterations - 1); setWeight(forDecresing, maxIterations - 1); setWeight(layoutForDecreasing, maxIterations - 1); while (iterations < maxIterations) { iterations++; setWeight(forIncreasing, maxIterations - 1 + iterations); setWeight(layoutForIncreasing, maxIterations - 1 + iterations); setWeight(forDecresing, maxIterations - 1 - iterations); setWeight(layoutForDecreasing, maxIterations - 1 - iterations); try { Thread.sleep(10); } catch (InterruptedException e) { return; } } animationThread = null; } }); animationThread.start(); } private void setWeight(final View view, final float weight) { runOnUiThread(new Runnable() { @Override public void run() { LayoutParams params = (LayoutParams) view.getLayoutParams(); params.weight = weight; view.setLayoutParams(params); } }); } 

No sé si esto es posible para usted, pero en este ejemplo puede agregar algunos movimientos más fácil.

No recomiendo su uso de producción, si sólo tiene algunas otras opciones.

RESPUESTA ACTUALIZADA:

Utilice este código en drawable / animation_sample.xml

 <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false"> <translate android:fromXDelta="0%" android:toXDelta="100%" android:fromYDelta="0%" android:toYDelta="0%" android:duration="500" /> 

Y fije la animación al texto de la edición usando:

 Animation anim=AnimationUtils.loadAnimation( this, R.anim.righttoleft); editText = (EditText)findViewById(R.id.editText1); Display display = getWindowManager().getDefaultDisplay(); int width=display.getWidth(); int height = display.getHeight(); editText.setWidth(width); editText.setHeight(height); editText.startAnimation(anim); 

He tratado de explicar mi lógica para su problema … espero que funcione para usted ..

 EditText editText = new EditText(this); editText.setOnClickListener(new OnClickListener() { public void onClick(){ // Before getSize was introduced (in API level 13), you could use // the getWidth and getHeight methods that are now deprecated: Display display = getWindowManager().getDefaultDisplay(); int width = display.getWidth(); int height = display.getHeight(); editText.setWidth(width); editText.setHeight(height); } } 
  • Android ListView con múltiples selecciones y adaptadores personalizados
  • ListView addHeaderView hace que la posición aumente en uno?
  • Cómo agregar una vista dinámica a un elemento ListView en tiempo de ejecución?
  • ArrayIndexOutOfBoundsException cuando se utiliza ListAdapter
  • Cómo llamar a notifyDataSetChanged () desde un adaptador genérico
  • Recyclerview no llama al método Adapter: onCreateViewHolder, onBindViewHolder,
  • ¿Cuál es la diferencia entre ArrayAdapter, BaseAdapter y ListAdapter?
  • Cómo obtener un Inflater Layout dado un contexto?
  • ListAdapter Filtro que no sea el uso de cadenas?
  • Android: lista clara en Listadapter
  • Llamar notifyDataSetChanged en un ListAdapter
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.