java代码和xml布局文件如下:在布局加载完成之后,想设置imageview的位置在确定按钮的正上方,指点点击确定和取消按钮可以移动imageview,但是设置之后位置没有发生变化
package com.example.testmove;
import android.app.Activity;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnFocusChangeListener;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.animation.OvershootInterpolator;
import android.view.animation.TranslateAnimation;
import android.widget.Button;
import android.widget.ImageView;
public class MainActivity extends Activity {
private static ImageView iv;
private static Button btn1;
private static Button btn2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
getFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment()).commit();
}
}
@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 void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
int[] ivlocation = new int[2];
iv.getLocationInWindow(ivlocation);
int[] btnlocation = new int[2];
btn1.getLocationInWindow(btnlocation);
int ivwidth = iv.getWidth();
int btnwidth = btn1.getWidth();
int ivLeft = btnwidth / 2 - ivwidth/2;
// int ivLeft = ivlocation[0] - ivwidth / 2;
int ivTop = iv.getTop();
int ivRight = btnwidth / 2 + ivwidth/2;
// int ivRight = ivlocation[0] + ivwidth / 2;
int ivBottom = iv.getTop() + iv.getHeight();
iv.layout(ivLeft, ivTop, ivRight, ivBottom);
iv.requestLayout();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
/**
* A placeholder fragment containing a simple view.
*/
public static class PlaceholderFragment extends Fragment {
public PlaceholderFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container,
false);
iv = (ImageView) rootView.findViewById(R.id.iv);
// LayoutParams params = new LayoutParams(0, 0);
// iv.setLayoutParams(params );
btn1 = (Button) rootView.findViewById(R.id.btn1);
btn2 = (Button) rootView.findViewById(R.id.btn2);
final Animation myAnimation_Translate = AnimationUtils
.loadAnimation(getActivity(), R.anim.my_translate_action);
final TranslateAnimation animation = new TranslateAnimation(52,
500, 0, 0);
animation.setDuration(500);// 设置动画持续时间
// animation.setRepeatCount(2);// 设置重复次数
// animation.setRepeatMode(Animation.REVERSE);// 设置反方向执行
btn1.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
// int[] location = new int[2];
//
// btn1.getLocationOnScreen(location);
int width = btn1.getWidth();
//
//
// iv.startAnimation(animation);
// iv.setAnimation(animation);
// /** 开始动画 */
// animation.startNow();
slideview(0, width);
}
});
btn2.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
int width = btn1.getWidth();
//
slideview(0, -width);
}
});
return rootView;
}
}
public static void slideview(final float p1, final float p2) {
TranslateAnimation animation = new TranslateAnimation(p1, p2, 0, 0);
// animation.setInterpolator(new OvershootInterpolator());
animation.setDuration(500);
// animation.setStartOffset(delayMillis);
animation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
int left = iv.getLeft() + (int) (p2 - p1);
int top = iv.getTop();
int width = iv.getWidth();
int height = iv.getHeight();
iv.clearAnimation();
iv.layout(left, top, left + width, top + height);
}
});
iv.startAnimation(animation);
}
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.testmove.MainActivity$PlaceholderFragment" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_alignParentBottom="true"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:background="#F00"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="10dp"
android:orientation="horizontal"
android:weightSum="4" >
<ImageView
android:id="@+id/iv"
android:layout_width="wrap_content"
android:layout_height="10dp"
android:scaleType="fitXY"
android:src="@drawable/ic_launcher" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="#0F0"
android:orientation="horizontal" >
<Button
android:id="@+id/btn1"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2"
android:background="@drawable/mybtn"
android:text="确定" />
<Button
android:id="@+id/btn2"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2"
android:background="@drawable/mybtn"
android:text="取消" />
</LinearLayout>
</LinearLayout>
</RelativeLayout>