在我的活动中,我只有一个ImageView。在其中,src是比屏幕大很多的图片。我希望图片从左到右缓慢滚动,直到它到达照片的右边缘,然后开始向左滚动,直到达到左边距。然后重新开始。 我需要它在一个单独的线程中发生,这样手机就不会在发生这种情况时冻结。
我怎样才能做到这一点? 是否有一个小部件默认执行此操作?
更新代码 // layout:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mylinear"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
>
<ImageView
android:id="@+id/img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scaleType="center"
android:src="@drawable/rainforest" />
</RelativeLayout>
//和活动
public class MainActivity extends Activity {
Animation _translateAnimation;
RelativeLayout _relativeLoading = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
_translateAnimation = new TranslateAnimation(TranslateAnimation.ABSOLUTE, 0f, TranslateAnimation.ABSOLUTE, -100f, TranslateAnimation.ABSOLUTE, 0f, TranslateAnimation.ABSOLUTE, 0f);
_translateAnimation.setDuration(5000);
_translateAnimation.setRepeatCount(-1);
_translateAnimation.setRepeatMode(Animation.REVERSE); // REVERSE
_translateAnimation.setInterpolator(new LinearInterpolator());
_relativeLoading = (RelativeLayout) findViewById(R.id.mylinear);
_relativeLoading.startAnimation(_translateAnimation);
}
但它没有了。 我的意思是,滚动从左到右,将图片“推”到左边,并在ImageView下方显示白色背景。
此外,这应该在一个线程内还是什么?我需要能够以某种方式退出这个“滚动”活动,而不使用“后退”按钮。我想要一个ImageView顶部的按钮(按钮应保持静止)和onClick它应该启动另一个Intent
看起来ImageView中的图片被裁剪为适合屏幕内部。我怎么能克服这个?
答案 0 :(得分:5)
所以,我的问题的解决方案在这里(对于所有新的Android开发人员,像我一样,他们的应用可能需要这个):
public class MainActivity extends Activity {
Animation _translateAnimation;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
_translateAnimation = new TranslateAnimation(TranslateAnimation.ABSOLUTE, 0f, TranslateAnimation.ABSOLUTE, -300f, TranslateAnimation.ABSOLUTE, 0f, TranslateAnimation.ABSOLUTE, 0f);
_translateAnimation.setDuration(8000);
_translateAnimation.setRepeatCount(-1);
_translateAnimation.setRepeatMode(Animation.REVERSE); // REVERSE
_translateAnimation.setInterpolator(new LinearInterpolator());
ImageView img = (ImageView) findViewById(R.id.img);
img.startAnimation(_translateAnimation);
}
}
和布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/global_relative"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:orientation="vertical"
>
<ScrollView
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<ImageView
android:id="@+id/img"
android:layout_width="600dp"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:background="@drawable/rainforest"
android:scaleType="center"
android:src="@drawable/rainforest613x490" >
</ImageView>
</ScrollView>
</RelativeLayout>
只需确保您的图像大/高到足以适合屏幕,并且(+ 300dp)比屏幕宽度宽(或调整上面的代码)。
快乐的编码;)
答案 1 :(得分:2)
例如:
private Animation _translateAnimation;
private ImageView _image;
_image = (ImageView)findViewById(R.id.yourimage);
_translateAnimation = new TranslateAnimation(TranslateAnimation.ABSOLUTE, 0f, TranslateAnimation.ABSOLUTE, 100f, TranslateAnimation.ABSOLUTE, 0f, TranslateAnimation.ABSOLUTE, 0f);
_translateAnimation.setDuration(10000);
_translateAnimation.setRepeatCount(-1);
_translateAnimation.setRepeatMode(Animation.REVERSE);
_translateAnimation.setInterpolator(new LinearInterpolator());
_image.setAnimation(_translateAnimation);
这将使_linearLoading左右和左右缓慢转换......
更长的持续时间=更慢
TranslateAnimation.ABSOLUTE =使用图像的位置 TranslateAnimation.RELATIVE_TO_PARENT =使用父布局 ...
方法TranslateAnimation(开始x,结束x,开始y,结束y)
玩那个
答案 2 :(得分:0)
您可以做的是在ScrollView中添加ImageView。喜欢这个
<ScrollView
android:id="@+id/img_scroll"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/IMAGENAME" />
</ScrollView>
由于您想自动滚动图像,您可以创建一个AsyncTask并在doInBackground()方法中创建一个new Runnable
或runOnUiThread()
并使用它的ID向ScrollView发送命令以滚动需要它。