4

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

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

更新代码 // 布局:

<?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 内的图片被裁剪以适合屏幕。我该如何克服呢?

4

3 回答 3

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)(或调整上面的代码)。

快乐编码;)

于 2013-08-21T12:24:20.720 回答
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(start x, end x, start y, end y)

玩那个

于 2013-08-21T08:25:57.373 回答
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 RunnableorrunOnUiThread()并使用它的 ID 向 ScrollView 发送命令以根据需要滚动。

于 2013-08-21T08:24:22.863 回答