所以我有这个动画,我一直在努力。基本上,当您单击图像时,它所做的只是将图像设置为新的Y坐标。 注意:请记住,我的图像都适合mdli,hdpi,xhdpi等缩放。 所以我有两个问题: 1 。当我在图像视图上使用.setY时,y坐标在其他手机上的加载方式不同。的 2 即可。当我同时使用我的图像和txt动画方法时,它们都会根据不同的手机/屏幕设置不同的y坐标。 所以我的问题是如何解决这两个问题,以便它们在所有屏幕尺寸上保持一致?
public class MainActivity extends Activity {
final String tag = "My activity";
ImageView mWhatsTheAnswerImg, mInspireMeImg, mHelpMeThink, mTalkToVince;
ObjectAnimator mImageAnimation, mTxtAnimation;
TextView mWhatsTheAnswerText, mInspireMeTxt, mHelpMeThinkTxt, mTalkToVinceTxt;
boolean mWhatsTheAnswerBOOL, mInspireMeBOOL, mHelpMeThinkBOOL, mTalkToVinceBOOL =false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ActionBar actionBar = getActionBar();
actionBar.hide();
mInspireMeImg = (ImageView) findViewById(R.id.inspireme);
mInspireMeImg.setY(750);
mInspireMeTxt = (TextView) findViewById(R.id.inspireMeTxt);
mInspireMeTxt.setY(750);
mInspireMeImg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (mInspireMeBOOL) {
imageAnimate(mInspireMeImg, 750);
txtAnimate(mInspireMeTxt, 750);
Log.w(tag, "DOWN Coordinates: " + mInspireMeImg.getY() + "Txt: " + mInspireMeTxt.getY());
mInspireMeBOOL = false;
} else {
mInspireMeBOOL = true;
imageAnimate(mInspireMeImg, +290);
txtAnimate(mInspireMeTxt, +290);
Log.w(tag, "UP Coordinates: " + mInspireMeImg.getY() + "Txt: " + mInspireMeTxt.getY());
}
}
});
图片动画和txt动画方法:
private void imageAnimate(ImageView img, float YCoordinates){
mImageAnimation =ObjectAnimator.ofFloat(img, View.TRANSLATION_Y,YCoordinates);
Log.w(tag, "IMG Coordinates: " + img.getY());
mImageAnimation.setDuration(1000);
mImageAnimation.start();
}
private void txtAnimate(TextView txt, float YCoordinates){
mTxtAnimation = ObjectAnimator.ofFloat(txt, View.TRANSLATION_Y, YCoordinates);
Log.w(tag, "TXT Coordinates: " + txt.getY());
mTxtAnimation.setDuration(1000);
mTxtAnimation.start();
}
}
编辑:XML
<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"
tools:context="com.wyatt.avinceandroid.app.MainActivity">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/Background"
android:src="@drawable/coachvincebackground"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
android:scaleType="fitXY"/>
<ImageView
android:layout_width="match_parent"
android:layout_height="1000dp"
android:id="@+id/inspireme"
android:src="@drawable/inspiremescreen"
android:scaleType="fitXY"
android:layout_centerVertical="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Large Text"
android:id="@+id/inspireMeTxt"
android:layout_alignTop="@+id/helpMeThink"
android:layout_centerHorizontal="true"
android:layout_marginTop="89dp" />
<ImageView
android:layout_width="match_parent"
android:layout_height="1000dp"
android:id="@+id/helpMeThink"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="71dp"
android:src="@drawable/helpmethinkscreen"
android:scaleType="fitXY"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Large Text"
android:id="@+id/helpMeThinkTxt"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true" />
<ImageView
android:layout_width="match_parent"
android:layout_height="1000dp"
android:id="@+id/whatsTheAnswer"
android:src="@drawable/whatstheanswerscreen"
android:scaleType="fitXY"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Large Text"
android:id="@+id/whatsTheAnswerTxt"
android:layout_alignTop="@+id/AskVince"
android:layout_alignLeft="@+id/inspireMeTxt"
android:layout_alignStart="@+id/inspireMeTxt" />
<ImageView
android:layout_width="match_parent"
android:layout_height="1000dp"
android:id="@+id/AskVince"
android:src="@drawable/askvincescreen"
android:scaleType="fitXY"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Large Text"
android:id="@+id/askVinceTxt"
android:layout_below="@+id/helpMeThinkTxt"
android:layout_centerHorizontal="true" />
</RelativeLayout>
答案 0 :(得分:0)
setY
和其他类似方法需要以像素为单位的值。现在,这正是问题所在。不同的手机具有不同分辨率的屏幕,因此第750个像素将位于不同手机上的不同位置,除非两个显示器相同。
解决方案很简单。使用DP
中的值:
mInspireMeImg.setY(dpToPx(750));
并将此方法保存在某处:
public static int dpToPx(float dpValue, Context context){
return (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dpValue, context.getResources().getDisplayMetrics());
}
有关DP
单位的更多信息:
http://developer.android.com/training/multiscreen/screendensities.html
What is the difference between "px", "dp", "dip" and "sp" on Android?