ÀÖÓãµç¾º



  • ½ÌÓýÐÐÒµA¹ÉIPOµÚÒ»¹É£¨¹ÉƱ´úÂë 003032£©

    È«¹ú×Éѯ/ͶËßÈÈÏߣº400-618-4000

    AndroidÅàѵ֮×Ô¶¨ÒåViewÄÇЩÊÂ

    ¸üÐÂʱ¼ä:2016Äê07ÔÂ13ÈÕ17ʱ29·Ö À´Ô´:AndroidÅàѵѧԺ ä¯ÀÀ´ÎÊý:

    ×Ô¶¨ÒåViewÄÇЩÊÂ

    ǰÑÔ

    AndroidϵͳÒѾ­ÎªÎÒÃÇÌṩÁËÓи÷ÖÖ¹¦ÄܵÄViewÁË£¬ÈçÏÔʾÎı¾µÄ£¬Í¼Æ¬µÄ£¬»¹ÌṩÁËһЩViewGroup¿ØÖÆ×ÓViewÏÔʾµÄ£¬ÈçListView£¬LinearLayout£¬RelativeLayout£¬È»¶øÄØ£¬Ãæ¶Ô¸´ÔÓ¶à±äµÄ²úÆ·ÐèÇó£¬ÕâЩ»¹ÊÇÎÞ·¨Âú×ã¡£ÔÚºÚÂíµÄ¿Î³ÌÖУ¬ÎÒÃÇÓÐ4ÌìµÄרÃŽ²½â×Ô¶¨ÒåView֪ʶµÄ¿Î³Ì£¬Ò²ÔÚ4¸öÏîÄ¿ÖÐÈ¥´©²åµÄ½²½â×Ô¶¨Òå¿Ø¼þ£¬¿ÉÒÔ˵ËãÊDZȽÏÈ«ÃæÁË¡£½ñÌìÎÒ´Ó¼¸¸ö·½Ãæ×ۺϽ²½âÏÂÈçºÎÈ¥×Ô¶¨Òå³öÄãÏëÒªµÄView¡£
     

    ·ÖÎö

    µ±ÎÒÃÇ˵Ҫ×Ô¶¨ÒåÒ»¸öViewʱ£¬ÆäʵÄãÊÇÔÚÏë×Ô¶¨ÒåÕâ¸öViewµÄÕâЩ·½Ã棺
    1. ÄãÏë×Ô¶¨ÒåÕâ¸öViewÉÏÏÔʾµÄÄÚÈÝ
    2. ÄãÏë×Ô¶¨ÒåÕâ¸öViewÖÐ×ÓViewµÄ°Ú·ÅλÖÃ
    3. ÄãÏëÈÃÕâ¸öView¸úËæÊÖÖ¸µÄÒÆ¶¯½øÐÐijЩ±ä»¯
     
    ËùÒÔ£¬ÎÒÃǾʹÓÕâ4¸ö·½ÃæÀ´Ñ§Ï°ÈçºÎ×Ô¶¨ÒåЧ¹û¡£
     

    ʵ¼ù

    ÈçºÎ×Ô¶¨ÒåViewÏÔʾµÄÄÚÈÝ

    Ê×ÏÈ£¬ÄãÒªÖªµÀÏë×Ô¶¨ÒåViewÓ¦¸ÃÈ¥¼Ì³Ð×ÔË­£¬µ½µ×ÊÇView»¹ÊÇViewGroup£»Èç¹ûÄãÖ»ÊÇÏë×Ô¶¨Òåµ¥¸öViewµÄÄÚÈÝ£¬ÄÇôӦ¸Ã¼Ì³Ð×ÔView£»Èç¹ûÄãÏë×Ô¶¨ÒåÒ»¸ö²¼¾ÖµÄÏÔʾÄÚÈÝ£¬ÄÇôӦ¸Ã¼Ì³ÐViewGroup¡£
    ÏÖÔÚÎÒÃÇÉ趨ÐèÇó£¬Òª×öÒ»¸öÏÔʾһ¸öºìɫԲÐεÄView£¬ÄÇôÄãÒª¼Ì³ÐView£¬ÖØÐ´onDraw·½·¨£¬ÒòΪonDraw·½·¨¾ÍÊÇÔÊÐí×Ô¶¨ÒåÏÔʾÄÚÈݵķ½·¨¡£ÎÒÃÇÔÚÀïÃæ»æÖÆÒ»¸öÔ²£¬´úÂëÈçÏ£º
     
    public class CircleView extends View{
    Paint paint = new Paint();
    public CircleView(Context context, AttributeSet attrs) {
    super(context, attrs);
    paint.setColor(Color.RED);
    }
    @Override
    protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    canvas.drawCircle(getWidth()/2, getHeight()/2, 50, paint);
    }
    }
     
    Ч¹ûͼÈçÏ£º
     
     
    ÏÂÃæÄØ£¬ÎÒÃÇÔÚÉèÒ»¸ö¸´ÔÓµãµÄÐèÇó£¬ÒªÇó×Ô¶¨ÒåÒ»¸öÏÔʾһ¸öºìÉ«¶Ô¹´µÄView£¬ÕâʱºòÒª»æÖƶԹ´£¬ÐèÒª½èÖúPathÀàÀ´¹´ÀÕ¡£´úÂëÈçÏ£º
     
    public class TickView extends View{
    Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
    Path path = new Path();
    public TickView(Context context, AttributeSet attrs) {
    super(context, attrs);
    paint.setColor(Color.RED);
    paint.setStrokeWidth(8);
    paint.setStyle(Style.STROKE);
    }
    @Override
    protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    path.moveTo(100, 100);
    path.lineTo(140, 140);
    path.lineTo(220, 60);
    canvas.drawPath(path, paint);
    }
    }
     
    Ч¹ûͼÈçÏ£º
     
     
    Ok£¬ÒÔÉÏÕâЩ¾ÍÊÇÈçºÎ×Ô¶¨ÒåViewÄÚÈݵļ¼ÇÉ£¬µ±È»Èç¹ûÄãÏë»æÖÆ¸ü¼Ó¸´ÔÓµÄЧ¹û£¬ÄǾÍÒª×ÐϸѧϰһÏÂCanvasºÍPathµÄapiÁË¡£
     

    ÈçºÎ×Ô¶¨ÒåViewÖÐ×ÓViewµÄλÖÃ

    ´Ë´¦ÓÉÓÚÄãÒª×Ô¶¨ÒåµÄViewÖÐÊǰüº¬×ÓViewµÄ£¬ÄÇôÄãÓ¦¸Ã¼Ì³ÐViewGroup£¬²¢ÇÒͨ³£Çé¿öÏ£¬ÎÒÃÇΪÁËʡȥʵÏÖonMeasure·½·¨£¬ÄÇô¾Í¿ÉÒԼ̳ÐϵͳÌṩµÄij¸ö²¼¾Ö£¬ÈçFrameLayout¡£×Ô¶¨Òå×ÓViewµÄλÖã¬ÄÇôÐèÒªÖØÐ´onLayout·½·¨ÁË£¬¸Ã·½·¨ÊÇÔÊÐíÄãËæÒâÖ¸¶¨×ÓViewλÖõÄ¡£
    ÏÖÔÚÎÒÃÇÉ趨ÐèÇó£¬ÒªÇóʵÏÖÒ»¸öViewGroup£¬ËüµÄ×ÓViewÊÇ´ÓÓÒÍù×ó±ßÅÅÁеÄ¡£´úÂëÈçÏ£º
     
    public class RightLayout extends FrameLayout{
    public RightLayout(Context context, AttributeSet attrs) {
    super(context, attrs);
    }
    @Override
    protected void onLayout(boolean changed, int left, int top, int right,
    int bottom) {
    View child1 = getChildAt(0);
    View child2 = getChildAt(1);
    child1.layout(getMeasuredWidth()-child1.getMeasuredWidth(),
    getPaddingTop(),getMeasuredWidth(),
    getPaddingTop()+child1.getMeasuredHeight());
    child2.layout(child1.getLeft()-child2.getMeasuredWidth(), getPaddingTop(),getMeasuredWidth()-child1.getMeasuredWidth(),
    getPaddingTop()+child2.getMeasuredHeight());
    }
    }
     
    Ч¹ûͼÈçÏ£º
     
     
    ×ܽᣬͨ¹ýlayoutµÄ·½·¨À´¿ØÖÆViewµÄλÖã¬Õâ¸öÊôÓڱȽϼòµ¥µÄ¡£
     

    ÈçºÎÈÃViewËæÊÖÖ¸ÒÆ¶¯½øÐб仯

    ҪʵÏÖÕâ¸ö£¬ÄÇôÄãÐèÒªÍê³É2¸öµã£º
    1. ¼àÌýÊÖÖ¸ÒÆ¶¯µÄ¾àÀë
    2. ÈÃView½øÐÐһЩ±ä»¯
     
    ¶ÔÓÚµÚÒ»µã£¬¼àÌýÊÖÖ¸ÒÆ¶¯µÄ¾àÀ룬Õâ¸öºÜ¼òµ¥£¬¿ÉÒÔÖØÐ´onTouch·½·¨£¬»ñÈ¡ÊÖÖ¸ÒÆ¶¯¾àÀ룬Ҳ¿ÉÒÔ½èÖúViewDragHelperËù·â×°µÄ·½·¨À´¼àÌýÊÖÖ¸µÄÒÆ¶¯¡£¶ÔÓÚͨ¹ýonTouch·½·¨À´»ñÈ¡ÊÖÖ¸ÒÆ¶¯¾àÀëµÄ´úÂëÂÔ¹ý£¬ÏÂÃæÕ¹Ê¾Ò»ÏÂͨ¹ýViewDragHelperÀ´»ñÈ¡ÊÖÖ¸¾àÀëµÄ´úÂ룬ÄãÐèÒªÊìϤһÏÂViewDragHelperµÄÓ÷¨²ÅÄÜ¿´¶®ÏÂÃæµÄ´úÂ룬clampViewPositionHorizontal·½·¨µÄdx²ÎÊý¾ÍÊÇÊÖÖ¸ÒÆ¶¯µÄ¾àÀ룬´úÂëÈçÏ£º
     
    @Override
    public int clampViewPositionHorizontal(View child, int left, int dx) {
    //dx¾ÍÊÇÊÖÖ¸ÒÆ¶¯µÄ¾àÀë
    return super.clampViewPositionHorizontal(child, left, dx);
    }
     
    ËùÒÔ£¬»ñÈ¡ÊÖÖ¸ÒÆ¶¯¾àÀëºÜ¼òµ¥£¬ÎÒÃÇÖ÷Òª°Ñ¾«Á¦·ÅÔÚÈÃView½øÐÐһЩ±ä»¯ÉÏ¡£
    ÕâЩ±ä»¯Ò»°ãÊǵÄÊÇËõ·Å£¬Æ½ÒÆ£¬Í¸Ã÷£¬ÐýתµÄ±ä»¯£¬ÕâЩ±ä»¯Android¶¼ÎªÎÒÃÇÌṩÁ˶ÔÓ¦µÄ²Ù×÷ViewÊôÐԵķ½·¨£¬´úÂëÈçÏ£º
     
    @Override
    public int clampViewPositionHorizontal(View child, int left, int dx) {
    //dx¾ÍÊÇÊÖÖ¸ÒÆ¶¯µÄ¾àÀë
    //Æ½ÒÆ
    view.setTranslationX(dx);
    //Ëõ·Å
    view.setScaleX(0.1f);
    view.setScaleY(0.1f);
    //͸Ã÷
    view.setAlpha(0.1f);
    //Ðýת
    view.setRotation(180);
     
    return super.clampViewPositionHorizontal(child, left, dx);
    }
     
    µ±È»Èç¹ûÄãÐèÒªÈÃViewÖ´ÐÐijЩ¶¯»­Ð§¹û£¬ÄÇôÄãÒª½èÖúÊôÐÔ¶¯»­ÁË£¬Èç¹ûÄãÏë×Ô¶¨Ò嶯»­Ð§¹û£¬ÄÇô¾ÍÐèҪʹÓÃValueAnimator£¬»òÕ߼̳ÐAnimatonÀàʵÏÖ×Ô¶¨Ò嶯»­¡£
     

    ×ܽá

    ÒÔÉÏ×ܽáÁËÎÒÃÇ×Ô¶¨ÒåViewÖÐ×î³£ÓõÄÇé¾°£¬µ±È»»¹ÓÐÆäËûºÜ¶àÇé¿ö¡£²»¹ýÎÒÃÇ¿ÉÒÔÔÚÕâ3ÖÖ»ù´¡ÉϾÙÒ»·´Èý¡£Óöµ½¸´ÔÓµÄЧ¹û£¬¾Í·ÖÀëÄ£¿é£¬Ò»µãÒ»µãʵÏÖ£¬×Ô¶¨ÒåViewÒ²¾ÍÄÇôµãÊ¡£
     
     
     
     ±¾ÎİæÈ¨¹éÀÖÓã²¥¿ÍAndroidÅàѵѧԺËùÓУ¬»¶Ó­×ªÔØ£¬×ªÔØÇë×¢Ã÷×÷Õß³ö´¦¡£Ð»Ð»£¡
    ×÷ÕߣºÀÖÓã²¥¿ÍAndroidÅàѵѧԺ
    Ê×·¢£ºhttp://www.itcast.cn/Android
     
     
     
     
     
    0 ·ÖÏíµ½£º
    ºÍÎÒÃÇÔÚÏß½»Ì¸£¡
    ¡¾ÍøÕ¾µØÍ¼¡¿¡¾sitemap¡¿