android - 动态创建 Runnable

标签 android animation

请帮忙 我有 3 个 ImageView,我可以使用 3 个 Runnables 通过 TranslateAnimation 移动这 3 个 View 。 这是我的代码:

private Runnable run1= new Runnable() {   
    public void run() {
        if(t1)
        {
            LayoutParams params1=(LayoutParams) l1.getLayoutParams();
            params1.x=x1;
            params1.y=y1;
            l1.setLayoutParams(params1);
            x2=r.nextInt(720-80)+80;
            y2=r.nextInt(400-80)+80;

        TranslateAnimation ta1 = new TranslateAnimation(0, x2-x1, 0, y2-y1 );
        ta1.setDuration(800);
        ta1.setFillAfter(true);
        l1.startAnimation(ta1);
        x1=x2;
        y1=y2;

        handler.postDelayed(run1, 800);

        }
    }

}; 然后我有这样的 Run2、run3,并通过调用

来运行它们
    this.runOnUiThread(run1);
    this.runOnUiThread(run2);
    this.runOnUiThread(run3);

在OnCreate中

然后我有带有 int c ImageViews 的数组(例如 c=10,然后 c=20...)

for(j=0;j<c;j++)    
    { 

        mp[j] = MediaPlayer.create(getApplicationContext(), soundArray[i[j]]); 
        images[j]=new ImageView(getBaseContext());
        lp[j]=new LayoutParams(50,50, x1[j], y1[j]);
        images[j].setLayoutParams(lp[j]);
        images[j].setBackgroundResource(imgArray[i[j]]);
        images[j].setId(j);
        images[j].setOnClickListener((OnClickListener)this);
        abs.addView(images[j]);
    }

我怎样才能用它做这样的事情?

如何动态创建多个Runnable?

此代码不起作用

for(j=0;j<c;j++)    
    {
        run[j]=new Runnable()
        {
            public void run() {
                if(t[j])

                {

                    params[j]=(LayoutParams) images[j].getLayoutParams();
                    params[j].x=x1[j];
                    params[j].y=y1[j];
                    images[j].setLayoutParams(params[j]);

                    x2[j]=r.nextInt(720-80)+80;
                    y2[j]=r.nextInt(400-80)+80;

                    ta[j] = new TranslateAnimation(0, x2[j]-x1[j], 0, y2[j]-y1[j] );
                    ta[j].setDuration(200);
                    ta[j].setFillAfter(true);
                    images[j].startAnimation(ta[j]);
                    x1[j]=x2[j];
                    y1[j]=y2[j];

                    handler.postDelayed(run[j], 200);   
                }
            }

      };
    for(j=0;j<c;j++)    
    {
        this.runOnUiThread(run[j]);
    }

最佳答案

我创建了单独的类。这个类应该实现 Runnable。

public class Single implements Runnable{
    public ImageView img=new ImageView(getBaseContext());
    public boolean t=true;
    public int x2=0;
    public int y2=0;

    public void run() {
        if(t)

        {
            LayoutParams params=(LayoutParams) img.getLayoutParams();
            params.x=x2;
            params.y=y2;
            img.setLayoutParams(params);

            x2=r.nextInt(randX);
            y2=r.nextInt(randY);

            TranslateAnimation ta = new TranslateAnimation(0, x2-params.x, 0, y2-params.y );
            ta.setDuration(1000);
            ta.setFillAfter(true);
            img.startAnimation(ta);

            handler.postDelayed(this, 1000);    
        }
    }

}

然后我可以动态创建此类的对象数组,并为每个对象运行动画。

public Single[] images;
images=new Single[c];

    for(j=0;j<c;j++)    
    {
        images[j]=new Single();
        images[j].x2=r.nextInt(randX);
        images[j].y2=r.nextInt(randY);
        images[j].t=true;
    }
    for(int j1=0;j1<c;j1++) 
    {

        this.runOnUiThread(images[j1]);
    }

关于android - 动态创建 Runnable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9202033/

相关文章:

javascript - 如何在浏览器中调用原生 Android 应用程序

android - 谷歌地图未专门在 Android Lollipop 和 Marshmallow 谷歌地图 v2 中加载

javascript - 循环遍历图像数组作为轮播

javascript - D3.js 与维基百科的集成

使 ImageView 运行的 Android 缩放动画

java - 如何使用2个具有相同类名/命名空间的react-native包

java - 为什么我的应用中的动画在从 playStore 下载时不起作用,但在 AndroidStudio 中却起作用?

android - 如何将下面的Java build.gradle转换为android build.gradle

html - 使用 CSS 为句子中的单个单词制作动画

javascript - 使用 D3 (v5) 应用多个过渡