Android ImageView启动TranslateAnimation之后,如何得到移动过程中的位置。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android ImageView启动TranslateAnimation之后,如何得到移动过程中的位置。相关的知识,希望对你有一定的参考价值。
要求:一个图片从上到下移动,在移动过程中,如果点击,那么可以拖拽图片,放开后继续向下移动。
问题:当imageview.startAnimation(animation)之后,imageview实际上并没有移动。点击imageview的初始位置时,可以监听到onclick事件。但是点击移动中的图片时,就无法监听到onclick事件了。
想法:如果可以得到animation移动过程中的每个时刻的位置,再设置imageview的位置,这样,效果就是点击移动中的图片时能监听到onclick。
不知道这样的想法能不能行的通,想试一下,但是却没找到TranslateAnimation能得到位置的方法。希望大家帮帮忙。用其他方法能实现以上要求的,也请赐教。小弟拜谢了。
>我也没学多久,你说的这种情况我认为用Handler、Runnable处理会有效果
↑不明白什么意思,能说的具体点吗。拜托了。
///////////////////////////////////////////////////////
你试试下面的代码,我测试过,可行,xml布局文件就是一个absolutelayout,里面一个imageview,自己写
一个注释都没有,坏习惯,你自己看吧,呵呵~~~
package com.tianlv.study.temp;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.AbsoluteLayout;
import android.widget.ImageView;
public class temp extends Activity
private Handler mHandler = new Handler();
private Runnable mMoveImage = new Runnable()
public void run()
moveImage();
;
private ImageView iView;
private int downMouseY;
private AbsoluteLayout.LayoutParams downImagePms;
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
iView = (ImageView) findViewById(R.id.ImageView01);
iView.setOnTouchListener(new OnTouchListener()
public boolean onTouch(View view, MotionEvent event)
if(event.getAction() == MotionEvent.ACTION_DOWN)
Log.i("debug", "stop");
downMouseY = (int) event.getRawY();
downImagePms = (AbsoluteLayout.LayoutParams) iView.getLayoutParams();
mHandler.removeCallbacks(mMoveImage);
if(event.getAction() == MotionEvent.ACTION_UP)
Log.i("debug", "move");
mHandler.postDelayed(mMoveImage, 500);
if(event.getAction() == MotionEvent.ACTION_MOVE)
dragImage((int) event.getRawY()- downMouseY);
return true;
);
private void moveImage()
AbsoluteLayout.LayoutParams oldLayPms = (AbsoluteLayout.LayoutParams) iView.getLayoutParams();
AbsoluteLayout.LayoutParams newLayPms = new AbsoluteLayout.LayoutParams(oldLayPms.width, oldLayPms.height, oldLayPms.x, oldLayPms.y+1);
iView.setLayoutParams(newLayPms);
mHandler.removeCallbacks(mMoveImage);
if(newLayPms.y < 300)
mHandler.postDelayed(mMoveImage, 500);
private void dragImage(int y)
AbsoluteLayout.LayoutParams newLayPms = new AbsoluteLayout.LayoutParams(downImagePms.width, downImagePms.height, downImagePms.x, downImagePms.y+y);
iView.setLayoutParams(newLayPms);
参考技术A 采用Animation.AnimationListener,在onAnimationEnd的方法中改变当前视图利用LayoutParams的setMargins方法重新定位位置。
代码:
public void move()
jqkjScroll.setEnabled(true);
Animation mTranslateAnimation = new TranslateAnimation(0, 0, 0,
-showheight);// 移动
mTranslateAnimation.setDuration(minute);
// mAnimationSet.setFillAfter(true);
// mTranslateAnimation.setFillAfter(true);
mTranslateAnimation
.setAnimationListener(new Animation.AnimationListener()
public void onAnimationStart(Animation animation)
if (isNoMenu == false)
curent.setVisibility(View.GONE);
public void onAnimationEnd(Animation animation)
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
contentLayout.getLayoutParams());
contentImg.setImageResource(R.drawable.open);
params.setMargins(0, endY - startY, 0, 0);
contentLayout.clearAnimation();
contentLayout.setLayoutParams(params);
jqkjScroll.scrollTo(0, 0);
isMoveORShowing = false;
public void onAnimationRepeat(Animation animation)
);
contentLayout.startAnimation(mTranslateAnimation);
public void show()
jqkjScroll.setEnabled(false);
Animation mTranslateAnimation = new TranslateAnimation(0, 0, 0,
showheight);// 移动
mTranslateAnimation.setDuration(minute);
mTranslateAnimation
.setAnimationListener(new Animation.AnimationListener()
public void onAnimationStart(Animation animation)
if (isNoMenu == false)
curent.setVisibility(View.VISIBLE);
public void onAnimationEnd(Animation animation)
contentImg.setImageResource(R.drawable.close);
isMoveORShowing = false;
contentLayout.clearAnimation();
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
contentLayout.getLayoutParams());
params.setMargins(0, showheight + endY - startY, 0, 0);
contentLayout.setLayoutParams(params);
public void onAnimationRepeat(Animation animation)
);
contentLayout.startAnimation(mTranslateAnimation);
参考技术B 关注中
android activity ImageView全屏设置
开始接触android也有1月有余了,看了一小部分的教学视频+刚哥的疯狂讲义。总是看着视频做一些Demo,有些木讷。今天尝试终于进入项目中,在项目中巩固知识点。
功能1 project启动 显示欢迎页面而后跳转 主页面;
问题点 1 实现Imange 全屏显示:
解决方案:
1.设置image scaleType 属性:
android:scaleType="fitXY"
2.设置 activity theme 属性:
<activity android:name=".initView" android:theme="@android:style/Theme.Holo.NoActionBar">
这里只是改变某一个 activity 的显示效果,所以只修改某一个activity 的样式。这里要注意,在修改 activity 的Theme 的属性后,需要将 对应的实现类 父类修改为android.app.activity否则运行时会报错:
java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
最终看效果如下:
本文出自 “洛山红茶的成长” 博客,请务必保留此出处http://85608547.blog.51cto.com/2093443/1881054
以上是关于Android ImageView启动TranslateAnimation之后,如何得到移动过程中的位置。的主要内容,如果未能解决你的问题,请参考以下文章
android activity ImageView全屏设置