您的位置:首页 > 移动开发 > Android开发

给指定的view添加边框

2015-06-16 16:52 543 查看
很多时候,我们希望给获取焦点的View添加一个高亮的边框,如下面的途中所示,没有选中的Button是没有高亮框的,选中的则有。



要实现这个效果,这里提供一种方案。

1.首先要有一张如上图顶部一样的图片,该图片用来拉伸后作为高亮框。

2.自定义一个MyView,继承自View,1中所提到的图片就是该View的背景图

3.定义一个public void changeFocusPosition(int x,int y,int width,int height)方法,用来在指定的View获得焦点后调用该方法,传入的是需要高亮框显示的位置和大小,

这些值可以由需要添加高亮框的View的属性获得

4.之后根据3中传入的值来改变MyView的Layout参数。

MyView的基本结构定义如下:

public class MyView extends View {
private int srcLeft, srcTop, srcWidth=20, srcHeight=20;
private int desLeft, desTop, desWidth=20, desHeight=20;

private FrameLayout.LayoutParams frame_p;

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

public void changeFocusPos(int posX, int posY, int destWidth, int destHeight)

{

        desLeft = posX;

        desTop = posY;

        desWidth = destWidth;

        desHeight = destHeight;

        startFocus();

    }

protected void onDraw(Canvas canvas) {

        // 绘制焦点
if(frame_p == null)
frame_p =  (LayoutParams) this.getLayoutParams();
updateRect();

        this.setLayoutParams(frame_p);
}

  private void updateRect()

    {

        frame_p.leftMargin = desLeft ;

        frame_p.topMargin = desTop ;

        frame_p.width = desWidth ;

        frame_p.height = desHeight ;

        frame_p.gravity = Gravity.TOP|Gravity.LEFT; 

    }

  private void startFocus()
 {

        postInvalidate();

    }

}

上面之所以写的绕了些,主要是可以在不同的阶段添加相应的控制,实现各种移动动画效果。

使用:

MyView  mv = new MyView(this);

mv.setBackgroundResource(R.drawable.frame);

public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus == true)
mv.changeFocusPos(v.getLeft(), v.getTop(), v.getWidth(), v.getHeight());

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 焦点框