`
phenom
  • 浏览: 408873 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

机顶盒 页面 选中后的 动画

 
阅读更多
前面已经说过了,对于机顶盒的焦点的处理.
相信有不少人看过,小米机顶盒应用中的效果了.选中的图片,放大,还有阴影.

也有不少的应用有这种效果的.

今天不讨论布局的处理,这部分可以自定义行列,也可以固定的.

说的是选中的放大效果.
对于机顶盒,时刻需要保持着焦点,使用这种放大的效果,可以有增强的效果.但是所有的控件都采用这种选中放大的效果,我只能说  某xx研究院 的xx,你们都有病. 在没有其它对比控件的时候 , 却不处理焦点 , ....

废话不说,实现原理:

一般这种页面的布局是一个imageview,或者加一个textview,有显示一些文本,也可以把这两个结合在一起,然后设置一直显示文本,或者在控件选中时显示文本.
比如我使用的是自定义组合控件:relativelayout,里包含两个控件:
private ImageView mImageView;
    private TextView mTextView;
//是否总显示文本
    private boolean alwaysShowTxt=false;
关于其它的初始化等不介绍了.
@Override
    protected void onFocusChanged(boolean gainFocus, int direction, Rect previouslyFocusedRect) {
        super.onFocusChanged(gainFocus, direction, previouslyFocusedRect);
        if (!alwaysShowTxt) {
            if (gainFocus) {
                if (mTextView.getVisibility()==GONE) {
                    mTextView.setVisibility(VISIBLE);
                    mTextView.requestLayout();
                }
            } else {
                if (mTextView.getVisibility()==VISIBLE) {
                    mTextView.setVisibility(GONE);
                }
            }
        }
    }
这样的组合 就可以在选中一个控件后,显示文本,不选中后,就隐藏了.

以这个Layout为一个控件,然后取其背景,或者取它的ImageView的背景.
依旧是原来的处理方式.

<RelativeLayout>
<layout>这里填充主体布局,原来如何就是如何的.
</layout>
<bglayout>
这里填充一个选中后的布局,如果使用一个图片+文本,就可以使用上面的 组合控件,或者就在xml中写两个,一个是imageview,一个是textview.
</bglayout>
</RelativeLayout>

可以使用getDrawable(),但是这个是单例的 , 开始时,在动画处理中,把原来的选中的背景直接拿来,放在bglayout中,实现放大后,焦点变换,原来的图片无法恢复,因为drawable是同一个,在使用后要恢复原状.

focus_img2 如果没有文本,可以只是一个图片,如果包含文本,可以是一个ViewGroup.
private View.OnFocusChangeListener mFocusListener=new View.OnFocusChangeListener() {

        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (hasFocus) {
                focus_img2.setVisibility(View.VISIBLE);
                setFocusImageView2(v, hasFocus);
            } else {
                focus_img2.setVisibility(View.INVISIBLE);
            }
        }
    };
对于控件设置焦点监听.比如ViewGroup a=findViewById();a.setonfocuschanged(mFocusListener);

然后选中后,就会触发,然后在setFocusImageView2(v, hasFocus);处理选中后的效果.


private void setFocusImageView2(View view, boolean hasFocus) {
        Rect r=new Rect();

        view.getGlobalVisibleRect(r);
        Rect rAll=new Rect();
        mRoot.getGlobalVisibleRect(rAll);

//这里取原控件的大小,然后再加上一部分的高宽,就有放大的效果了.再加上阴影的.9背景
        float xOffset=40f;
        float yOffset=40f;

        ViewGroup.LayoutParams params;
        params=focus_img2.getLayoutParams();
        params.height=r.height()+(int) (yOffset*2);
        params.width=r.width()+(int) (xOffset*2);
        focus_img2.setLayoutParams(params);

focus_img2.setImageResource();
这里的图片资源,可以使用view.getDrawable(),但是会出现上面所说的状况.如果想恢复,还是要修改上面的params.应该是在onFocusChange()中else部分修改.
这里说另一种处理方式.比如知道了view中的图片资源的url,一般也是存储于内存中的,然后对于
focus_img2设置了大小高,设置图片为url对应的图片,然后再设置一个背景,这个背景是边有阴影的.9图片,这样看上去效果就好多了.图片放大后,就是遮住了底部的一部分内容,将这个focus_img2在焦点上方.


        //用动画效果将图片移到目标位置
        PropertyValuesHolder pvhX=PropertyValuesHolder.ofFloat("x", (r.left-rAll.left-xOffset));
        PropertyValuesHolder pvhY=PropertyValuesHolder.ofFloat("y", (r.top-rAll.top-yOffset));
        ObjectAnimator oa=ObjectAnimator.ofPropertyValuesHolder(focus_img2, pvhX, pvhY);
oa.setDuration(10);
oa.start();

}
还有一个重要的问题就是,对于bglayout不应该设置margin,这会影响第一次选中后焦点框的位置.


分享到:
评论
4 楼 Jerome_XX 2014-01-26  
您好 可以给发个Demo么?谢谢 373671167@qq.com 真的谢谢
3 楼 phenom 2014-01-19  
暂时没有时间做了 , 有思路已经挺好的了 .
2 楼 xutian2008 2014-01-18  
能给发个demo么?411872867@qq.com
1 楼 xutian2008 2014-01-18  
很有用的思路

相关推荐

    Tab+ViewPager有动画效果代码已优化

    当这两个组件结合时,我们可以为页面切换添加过渡动画,使得用户体验更加流畅。 在实现动画效果时,有两种主要的方法:一是自定义`ViewPager.PageTransformer`,二是利用`TabLayout`的`addOnTabSelectedListener`...

    (2010)专升本计算机考试总复习资料.pdf

    34. 通过电视机上网通常需要配备网络适配器,如数字电视机顶盒。 35. IP地址由4组数字组成,用点分十进制表示,每组数字范围在0-255之间。 36. Internet的一端提供服务的称为服务器,另一端访问的称为客户端。 37. ...

    css3仿虾米网banner相片墙.zip

    4. **CSS3过渡(transition)**:过渡效果使得一个样式到另一个样式的改变变得平滑,比如当照片被点击时,可能会有一个过渡效果让选中的照片放大或改变颜色。 5. **CSS3 Flexbox布局**:Flexbox是CSS3中的弹性盒...

    傲游浏览器3(Maxthon) 3.1.8.1000 正式版

    傲游旨在通过浏览器向用户提供全面的一站式互联网服务,产品覆盖桌面、手机、平板、机顶盒等平台,在全球范围内拥有几千万活跃用户。傲游致力于技术研发,于2009年10月28日在北京成立国内最大的专业浏览器研发中心,...

    百度贴吧布局

    6. **用户体验**:设计时应考虑用户习惯和易用性,如Tab标签的命名应清晰明了,切换动画要流畅,同时要注意避免过多的Tab导致页面混乱。 通过模仿百度贴吧布局,新手不仅能掌握基础的前端技术,还能学习到如何构建...

    专升本复习资料-计算机基础.pdf

    31. **电视上网**:普通电视机通过调制解调器和电视机顶盒等设备可以实现上网。 32. **IP地址**:IP地址由4组用点分隔的十进制数组成,如192.168.0.1,每组数值范围是0-255。 33. **域名系统**:域名通过DNS...

    css导航标题css导航标题css导航标题

    1. **盒模型**:理解CSS盒模型(content, padding, border, margin)对于创建不同尺寸和形状的导航条至关重要。 2. **定位**:使用`position`属性(static, relative, absolute, fixed)来控制导航元素的位置,使其...

    BlogAnnaBella:仅使用基本的html和css开发的个人博客模板。 在我使用模型Anna Bella(虚拟人物)的情况下,但可以轻松更改它

    在布局方面,CSS的盒模型(Box Model)很重要,它包括内容、内边距(padding)、边框(border)和外边距(margin)。开发者可能利用浮动(float)或定位(positioning)来实现元素的相对或绝对定位,从而创建多列...

    menuBar:这是电子商务项目的主菜单栏

    作为项目的主菜单栏,它通常位于页面的顶部,横跨整个页面宽度,以便用户无论在哪里都能轻松访问。`menuBar` 的设计和实现主要依赖于 CSS(层叠样式表)技术,它允许我们控制网页的布局、颜色、字体等视觉效果。 ...

    提神头

    5. **过渡和动画**:CSS3引入了过渡(`transition`)和动画(`animation`),可以为头部元素添加动态效果,比如按钮点击时的色彩变化,或者导航菜单展开和收起的平滑过渡。 6. **字体图标**:为了增加视觉效果,设计师...

    NAvEs

    2. **盒模型**:CSS盒模型是理解元素大小和布局的基础,包括content、padding、border和margin。在创建导航栏时,我们会调整这些属性来控制导航项的大小和间距。 3. **布局技术**:可能使用了流式布局、网格布局...

Global site tag (gtag.js) - Google Analytics