经由过程addOnScrollListener监听,当滚动时,拿到所有可见的Item,找出正在显示图片的Item。然后调用setDy,dy的值为 mLinearLayoutManager.getHeight() - view.getTop() ,当View大年夜最底部出现的时刻为0,当View达到最顶部的时刻为当前rv的高度。
你可以合理的应用setDy传入的值,做移动差,显示区域大年夜上到劣等,都可以。
如许就完成了~~

一句话实现:即滚动时赓续改变dy,然后translate绘制即可。
好了,抛开其余,肯定下本文的目标:
四、再想想
看着这个代码,似乎 drawableToBitamp 看起来异常不爽,也是比较耗内存的部分。我们再想想:
本身Drawable就是能绘制的,为什愦我们要转成bitmap呢?
似乎有事理,ImageView本身绘制的就是Drawable,我们须要控制的就是这个Drawable的绘制范围要足够大年夜,不克不及被控件本身的宽高所影响,导致图片被压扁。
似乎有那么一个办法:
- drawable.setBounds();
那就R单了,去除drawable2bitmap的代码,直接应用本来的绘制即可,我们独一要做的就是设置bounds,做一个translate dy即可。
- public class AdImageView extends AppCompatImageView {
- // 删除构造办法
- private int mDx;
- private int mMinDx;
- public void setDx(int dx) {
- if (getDrawable() == null) {
- return;
- }
- mDx = dx - mMinDx;
- if (mDx <= 0) {
- mDx = 0;
- }
- if (mDx > getDrawable().getBounds().height() - mMinDx) {
- mDx = getDrawable().getBounds().height() - mMinDx;
- }
- invalidate();
- }
- @Override
- protected void onSizeChanged(int w, int h, int oldw, int oldh) {
- super.onSizeChanged(w, h, oldw, oldh);
- mMinDx = h;
- }
- public int getDx() {
- return mDx;
- }
- @Override
- protected void onDraw(Canvas canvas) {
推荐阅读
开辟者大年夜赛路演 | 12月16日,技巧立异,北京不见不散 作为一个生活在移动互联网时代的技巧宅,饱受骚扰短信之苦,但没有一个简单的又不消上传本身短信的过滤应用。于是我大年夜本身收到>>>详细阅读
地址:http://www.17bianji.com/lsqh/39523.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示