简单的view获得焦点高亮边框

Focus

requestFocus():强制设置一个焦点到指定的view或它的一个子类,(前提是android:focusable为true能够获得焦点)
 
 android:focusable:设置一个控件能否获得焦点
 android:background:设置在作为背景的drawable
 android:nextFocusDown:定义下一个获得焦点的控件当按下键时
 android:nextFocusUp:定义下一个获得焦点的控件当按上键时
 android:nextFocusLeft:定义下一个获得焦点的控件当按左键时
 android:nextFocusRight:定义下一个获得焦点的控件当按右键时

 

xml布局设置

<RelativeLayout
    android:id="@+id/rl_home"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:background="@drawable/gridview_item_select"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:gravity="center"
    android:padding="4dp">

            <TextView
                android:id="@+id/item_name"
                android:layout_width="70dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:duplicateParentState="true"
                android:ellipsize="marquee"
                android:gravity="center"
                android:singleLine="true"
                android:textSize="12sp"
    
           />
    </RelativeLayout>

gridview_item_select xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_selected="true" android:drawable="@drawable/corner_rectangle"/>
    <item android:state_focused="true" android:drawable="@drawable/corner_rectangle" />
    <item android:state_pressed="true" android:drawable="@drawable/corner_rectangle"/>
   <item android:drawable="@android:color/transparent"/>
</selector>

其中corner_rectangle xml

<?xml version="1.0" encoding="utf-8"?>

<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <!--圆角度数-->
    <corners
        android:radius="15dp"
        />
    <!--边宽宽度及边宽颜色-->
    <stroke
        android:width="2dp"
        android:color="@color/white"/>
    <solid
        android:color="@color/transparent"
        />

</shape>

这样当view rl_home获取焦点时,背景框就变了,也可以将 .9.png代替corner_rectangle文件,.9.png文件可以实现焦点边框泛光的效果。

给view添加focuschangelistener监听,当view获取焦点时显示放大动画,失去焦点时缩小正常。

private View mCurrentView;


    public View.OnFocusChangeListener mFocusChangeListener = new View.OnFocusChangeListener() {

        @Override
        //设置焦点事件
        public void onFocusChange(View v, boolean hasFocus) {
            if (hasFocus) {
                mCurrentView = v;
                enlargeAnim(v);
            } else {
                reduceAnim(v);
            }
        }
    };

    public View getCurrentView() {

        return mCurrentView;
    }

    public void requestInitFocus() {

    }

    public View.OnFocusChangeListener getFocusChangeListener() {
        return mFocusChangeListener;
    }

    public void enlargeAnim(View v) {
        //animation:animation.AnimationUtils.loadAnimation(context,id);动画效果
        Animation a = android.view.animation.AnimationUtils.loadAnimation(v.getContext(), R.anim.base_enlarge);
        a.setAnimationListener(new Animation.AnimationListener() {

            @Override
            public void onAnimationStart(Animation animation) {
            }

            @Override
            public void onAnimationRepeat(Animation animation) {

            }

            @Override
            public void onAnimationEnd(Animation animation) {
            }
        });
        a.setFillAfter(true);
        v.clearAnimation();
        v.setAnimation(a);
        v.bringToFront();
        a.start();
    }

    public void reduceAnim(View v) {
        Animation a = android.view.animation.AnimationUtils.loadAnimation(v.getContext(), R.anim.base_reduce);
        a.setFillAfter(true);
        v.clearAnimation();
        v.startAnimation(a);
        a.start();
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值