0

我想将图像转换为另一个指定的位置..我在代码给出的代码中尝试这里。错误的方式翻译..在编程上将android的imageview(对象像按钮)原始(放置的位置)放置在屏幕上的另一个指定位置

请谁能帮助我走出这个问题..

package com.example.numbercount1; 

import com.nineoldandroids.animation.ObjectAnimator; 

import android.annotation.SuppressLint; 
import android.app.Activity; 
import android.os.Bundle; 
import android.util.DisplayMetrics; 
import android.util.Log; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.View.OnTouchListener; 
import android.view.animation.Animation; 
import android.view.animation.TranslateAnimation; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.RelativeLayout; 

public class TestingAnimation extends Activity implements OnClickListener { 


Button btn1 ,btn2 ; 
float fromXposition ,fromYPosition , toXPosition , toYPosition ; 
TranslateAnimation transAnimation ; 
RelativeLayout mainScreen ; 
ImageView imageOne , imageTwo , imageThree ; 
float sourceX , sourceY , destinationX , destinationY ; 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.testing_activity_main); 


    mainScreen = (RelativeLayout) findViewById(R.id.mainscreen); 

    imageOne = (ImageView) findViewById(R.id.imageView1); 
    imageTwo = (ImageView) findViewById(R.id.imageView2); 
    imageThree = (ImageView) findViewById(R.id.imageView3); 

    imageOne.setOnClickListener(this); 
    imageTwo.setOnClickListener(this); 
    imageThree.setOnClickListener(this); 

    readLocation("onCreate"); 


} 

private void readLocation(String str) { 
    Log.v("hari", "str:"+str); 

     DisplayMetrics displayMetrics = new DisplayMetrics(); 
     getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); 

     int offsetX = displayMetrics.widthPixels - mainScreen.getMeasuredWidth(); 
     int offsetY = displayMetrics.heightPixels - mainScreen.getMeasuredHeight(); 


    int[] locationInWindow = new int[2]; 
    imageTwo.getLocationInWindow(locationInWindow); 
     int[] locationOnScreen = new int[2]; 
     imageTwo.getLocationOnScreen(locationOnScreen); 

     sourceX = locationOnScreen[0]; 
     sourceY = locationOnScreen[1]; 

Log.v("hari", "getLocationInWindow:--locationInWindow:" 
+locationInWindow[0]+", locationInWindow:"+locationInWindow[1]); 
Log.v("hari", "getLocationOnScreen:--locationInWindow:" 
+locationOnScreen[0]+", locationInWindow:"+locationOnScreen[1]); 

     Log.v("hari", "readLocation:--offsetX:"+offsetX+", offsetY:"+offsetY); 

     Log.v("hari","---------------------------------------------"); 

      int[] locationInWindowSecond = new int[2]; 
     imageThree.getLocationInWindow(locationInWindowSecond); 
      int[] locationOnScreenSecond = new int[2]; 
      imageThree.getLocationOnScreen(locationOnScreenSecond); 

    Log.v("hari","getLocationInWindow:--locationInWindowSecond:" 
    +locationInWindowSecond[0]+", locationInWindowSecond:"+locationInWindowSecond[1]); 
Log.v("hari","getLocationOnScreen:--locationOnScreenSecond:" 
+locationOnScreenSecond[0]+", locationOnScreenSecond:"+locationOnScreenSecond[1]); 

Log.v("hari", "readLocation:--offsetX:"+offsetX+", offsetY:"+offsetY); 

      destinationX = locationOnScreenSecond[0]; 
      destinationY = locationOnScreenSecond[1]; 



} 

@Override 
public void onWindowFocusChanged(boolean hasFocus) { 
    // TODO Auto-generated method stub 
    super.onWindowFocusChanged(hasFocus); 

    readLocation("onWindowFocusChanged"); 
} 

@SuppressLint("NewApi") 
@Override 
public void onClick(View v) { 

    switch (v.getId()) { 

    case R.id.imageView2 : 

     Log.v("hari", "onclick image button2"); 

     fromXposition = v.getX() ; 
     fromYPosition = v.getY() ; 

Log.v("hari", "fromXposition:"+fromXposition+"--fromYPosition:"+fromYPosition); 

     toXPosition = imageThree.getX() ; 
     toYPosition = imageThree.getY() ; 

Log.v("hari", "toXPosition:"+toXPosition+"--toYPosition:"+toYPosition); 

//transAnimation= new TranslateAnimation(sourceX, sourceY, 
destinationX, destinationY); 
transAnimation= new TranslateAnimation(sourceX, destinationX,sourceY,destinationY); 
     transAnimation.setDuration(3000); 
     v.startAnimation(transAnimation); 

    ObjectAnimator transAnimationNew= ObjectAnimator.ofFloat(v, "moving", 
destinationX, destinationY); 
      transAnimationNew.setDuration(500); 
      transAnimationNew.start(); 

     break; 

    default: 
     break; 
    } 


} 
} 

---------------------------------------------------------------- 
    testing_activity_main.xml.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" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
android:id="@+id/mainscreen" 
tools:context=".MainActivity" > 

<RelativeLayout 
    android:id="@+id/relative_subContainer" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentTop="true" 
    android:background="@drawable/curvedborder_new" > 

    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_marginTop="184dp" 
     android:layout_toLeftOf="@+id/imageView2" 
     android:src="@drawable/ic_launcher" /> 

    <ImageView 
     android:id="@+id/imageView3" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignRight="@+id/imageView2" 
     android:layout_alignTop="@+id/imageView2" 
     android:layout_marginRight="139dp" 
     android:src="@drawable/ic_launcher" /> 

    <ImageView 
     android:id="@+id/imageView2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignTop="@+id/imageView1" 
     android:layout_marginLeft="416dp" 
     android:src="@drawable/ic_launcher" /> 

</RelativeLayout> 

</RelativeLayout> 


Thanks Advance 
+0

为什么不直接绘制位图? – pskink

+0

我只想移动物体对于我来说已经足够了。我已经拍摄了对象x,y coordinates.this x,y只有正确的位置。但是,我不能移动对象在指定的地方。它移动错误的地方.. – harikrishnan

+0

我的问题是两个地方最大。一个用于使用readLocation方法获取对象位置并指定transAnimation = new TranslateAnimation(sourceX,destinationX,sourceY,destinationY)上的位置; – harikrishnan

回答

0

你想翻译imageTwoimageThree,我对不对?

如果是这样,那么传递给TranslateAnimation's构造函数的参数是错误的。

这里有四个参数:

float fromXDelta ==> starting xValue RELATIVE to the view 
-> ZERO in your case // imageTwo starts from where it is 

float toXDelta ==> final xValue RELATIVE to the view 
-> (destinationX - sourceX) in your case // imageTwo travels this much in X 

float fromYDelta ==> starting yValue RELATIVE to the view 
-> ZERO in your case // imageTwo starts from where it is 

float toYDelta ==> final yValue RELATIVE to the view 
-> (destinationY - sourceY) in your case // imageTwo travels this much in Y 

修正情况为R.id.imageView2

case R.id.imageView2 : 

    transAnimation= new TranslateAnimation(0f, 
              (destinationX - sourceX), 
              0f, 
              (destinationY - sourceY)); 
    transAnimation.setDuration(3000); 
    v.startAnimation(transAnimation); 

    break; 

如果您在动画后想imageTwo为 '留',附加一个AnimationListenertransAnimation,改变LayoutParamsimageTwo据此在onAnimationEnd

还有一件事:看看对此的评论(Link)的答案。你确定你获得有效的职位价值吗?一个安全的事情会打电话给readLocation(String str)onClick(View)

@Override 
public void onClick(View v) { 
    readLocation("onClick"); 

    switch(v.getId()) { 
     .... 
     .... 
    } 
} 

而且,locationOnScreen(int[])足以让你的目的。 locationInWindow(int[])不是必需的。

+0

嗨维克拉姆,其工作perfect.thanks .. – harikrishnan

+0

但需要一个更多的帮助..将对象从一个地方翻译到另一个地方(指定的位置),其保持动画状态(使用transAnimation.setFillAfter(true))..在那个时候,当我点击按钮时,onclick监听器不工作..当我点击imagetwo的地方,只有那个地方,动画开始以前相同.. – harikrishnan

+0

当我开始点击imagetwo,它的翻译imagethree place.fine ..再次,当我点击imagetwo,imagetwo需要去现有的开始的地方..可以请你指导我.. – harikrishnan

1

月1日,我建议你使用NineOldDroid的视图动画作为它的易于使用和你摆脱各点的触摸翻译。

例如,对于翻译

AnimatorSet set = new AnimatorSet(); 
       set.playTogether(
         ObjectAnimator.ofFloat(dragView, "x", holderLoc[0]), 
         ObjectAnimator.ofFloat(dragView, "y", holderLoc[1])); 
       set.setDuration(500).start(); 
       set.addListener(new AnimatorListener() { 

        @Override 
        public void onAnimationStart(Animator animation) { 

        } 

        @Override 
        public void onAnimationRepeat(Animator animation) { 

        } 

        @Override 
        public void onAnimationEnd(Animator animation) { 

        } 

        @Override 
        public void onAnimationCancel(Animator animation) { 


        } 
       }); 

其次,你说你有坐标的权利,所以我没有检查了,但你都在窗口获取View的坐标,当你将它移动到该位置但变量相应地设置为父视图。所以,做从那里

11个事)要么使视图相对布局

2)计算权值按父母的直接子视图。

相关问题