重写ImageView控件导致浮动menu位置为初始状态

原创 2015年11月20日 11:17:56
   问题描述:自己重写了ImageView控件,增加了OnTouch事件,使用矩阵操作实现了放大缩小,偏移等操作,当图片缩放至小于窗口的大小时居中显示,当多张图片之间相互切换时,当在ImageView上设置第二张图片时,之前移动的浮动menu的位置返回到了初始位置。带着问题我们一起深入。。。。。。

对于问题我们排除我们自己代码的问题导致此问题,再次我就不分析我的代码了,我明确知道是因为设置ImageView上的图片导致我的程序出现此问题。我们先看设置ImageView图片的源码:

/**
     * Sets a Bitmap as the content of this ImageView.
     * 
     * @param bm The bitmap to set
     */
    @android.view.RemotableViewMethod
    public void setImageBitmap(Bitmap bm) {
        // Hacky fix to force setImageDrawable to do a full setImageDrawable
        // instead of doing an object reference comparison
        mDrawable = null;
        if (mRecycleableBitmapDrawable == null) {
            mRecycleableBitmapDrawable = new ImageViewBitmapDrawable(
                    mContext.getResources(), bm);
        } else {
            mRecycleableBitmapDrawable.setBitmap(bm);
        }
        setImageDrawable(mRecycleableBitmapDrawable);
    }


------------------------------------------------------------
下面看setImageDrawable函数:
/**
     * Sets a drawable as the content of this ImageView.
     * 
     * @param drawable the Drawable to set, or {@code null} to clear the
     *                 content
     */
    public void setImageDrawable(@Nullable Drawable drawable) {
        if (mDrawable != drawable) {
            mResource = 0;
            mUri = null;

            final int oldWidth = mDrawableWidth;
            final int oldHeight = mDrawableHeight;

            updateDrawable(drawable);

            if (oldWidth != mDrawableWidth || oldHeight != mDrawableHeight) {
                requestLayout();
            }
            invalidate();
        }
    }

一眼就能看到调用了requestLayout函数,浮动menu又回到界面初始化的位置。

未完待续。。。。。。。。。。。。。。。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

组装原有控件实现横向滚动的时间选择器,可滑动 点击,初始状态在指定位置

前段时间,产品设计了一个横向的滚动的时间选择器,由于工作很急,也没时间来自定义view,而且目前开发的项目很老了,不支持V7的包,所以我不能用recyclerview。 我就将就之前的GridVie...

CButton控件:MFC如何给按钮添加图片,显示三种状态,分别是点击、盘旋、初始状态(不点击也不盘旋状态)。

如何给按钮添加图片,显示三种状态,点击、盘旋、初状态。 首先准备好3张不同状态的bmp格式图片。 例如:           以下我利用vs2013示范一下。 1.创建MFC工程(基本对话框),点击...

有多个初始状态的 DFA

最近做了一项工作:允许一个 DFA 有多个起始状态(可以称作根: root)。这样有以下几个好处: 对于多正则表达式匹配(Multiple Regular Expression Matching)的 ...
  • whinah
  • whinah
  • 2013年11月28日 22:17
  • 3245

影子系统-系统还原为初始状态

  • 2011年06月13日 23:49
  • 794KB
  • 下载

如何让vs2008回到初始状态

from: http://blog.sina.com.cn/s/blog_488cff520100nvw2.html 前几天写了一个测试winform程序,然后打开了.net的对象浏览器,然后关闭了...

AndroidStudio 保存当前工作状态失败,重启后恢复为初始状态的解决方案

开篇立博  AndroidStudio这个工具不必多说,确实好用。(建议保持原生快捷键,原因不做过多赘述) 当某些异常情况发生时,例如:蓝屏,突然断电......这时如果你正在开发,而且恰好用的是An...

linux下的初始状态下,根目录各个文件夹的作用与说明

/ 根目录  包含了几乎所的文件目录。相当于中央系统。进入的最简单方法是:cd /。/boot 引导程序,内核等存放的目录这个目录,包括了在引导过程中所必需的文件。在最开始的启动阶段,通过引导程序将内...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:重写ImageView控件导致浮动menu位置为初始状态
举报原因:
原因补充:

(最多只允许输入30个字)