2 cainiaodecai cainiaodecai 于 2017.11.15 10:09 提问

安卓编程小白问一个关于图片不断交换问题

比如说我想实现一个黑白图片不断交换的界面,用的是android-anim的方法。比如设置每次黑色图片停留时间为10ms,白色图片停留时间为10ms。这样就能实现一个黑白不断交替的感觉。但是因为我想在一个界面上实现好多个这样的黑白交替的感觉。每一个黑白图片都放在imageview里面,但是一个界面上有差不多1000个imageview,运行起来很卡,效果也不好。想问一下这种问题怎么解决啊?如果不采用这种方法,怎么才能使运行效果好一点呢?

4个回答

qq_34658785
qq_34658785   2017.11.15 10:25

厄,界面上很多同样的你可以用recycleView的网格布局啊

Grindstone_Fos
Grindstone_Fos   2017.11.15 14:33

这个有点耗资源啊
你可以试试把每一个动画都方法单独的工作线程里面
不知道这样有没有用

sinat_26761191
sinat_26761191   2017.11.15 15:33

你可以实行懒加载机制,在界面没有直接面对用户的时候可以不加载,反正他也看不出来,只加载看得到的,

u013147734
u013147734   2017.11.15 17:50

这个就不要用ImageView去装载了,1000个View,每个View都还不停加载图片,当然会卡。要优化内存,黑白图片直接用画颜色就好了,一个自定义view定时按规则draw出来画面。我不知道,你的图片需要怎么排列,如果你的意思是要黑白相间,我给你写一个自定义View

public class WhiteBlackView extends View {
    private int hc = 50, vc = 50;
    private float w, h;
    private RectF rect = new RectF();
    private Paint p = new Paint();
    private boolean b;

    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            if (msg.what == 100) {
                b = !b;
                invalidate();
                sendEmptyMessageDelayed(100, 10);
            }
        }
    };

    public WhiteBlackView(Context context) {
        super(context);
    }


    public WhiteBlackView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        this.w = w / hc;
        this.h = h / vc;
    }

    @Override
    protected void onAttachedToWindow() {
        super.onAttachedToWindow();
        handler.sendEmptyMessageDelayed(100, 10);
    }

    @Override
    protected void dispatchDraw(Canvas canvas) {
        for (int i = 0; i < vc; i++) {
            for (int j = 0; j < hc; j++) {
                rect.set(w * j, h * i, w * j + w, h * i + h);
                boolean ou = (i % 2 == 0) ^ (j % 2 == 0);
                if (!b) ou = !ou;
                p.setColor(ou ? Color.WHITE : Color.BLACK);
                canvas.drawRect(rect, p);
            }
        }
    }
}

我的狗眼已闪瞎。。。

Csdn user default icon
上传中...
上传图片
插入图片