Android Autoscroll imageview

时间:2013-08-21 08:18:28

标签: android android-imageview android-scrollview

在我的活动中,我只有一个ImageView。在其中,src是比屏幕大很多的图片。我希望图片从左到右缓慢滚动,直到它到达照片的右边缘,然后开始向左滚动,直到达到左边距。然后重新开始。 我需要它在一个单独的线程中发生,这样手机就不会在发生这种情况时冻结。 This Is What I need

我怎样才能做到这一点? 是否有一个小部件默认执行此操作?

更新代码 // 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中的图片被裁剪为适合屏幕内部。我怎么能克服这个?

3 个答案:

答案 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 RunnablerunOnUiThread()并使用它的ID向ScrollView发送命令以滚动需要它。