模仿 ios 分段单选

http://blog.csdn.net/qduningning/article/details/37935227

res/drawable/seg_left.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:state_selected="true">
        <shape >
            <stroke android:color="#0079FF" android:width="1dp"/>
            <solid android:color="#0079FF"/>
            <corners android:topLeftRadius="3dp" android:bottomLeftRadius="3dp" android:topRightRadius="0dp" android:bottomRightRadius="0dp"/>
        </shape>
    </item>
    <item>
        <shape >
            <stroke android:color="#0079FF" android:width="1dp"/>
            <solid android:color="#FFFFFF"/>
            <corners android:topLeftRadius="3dp" android:bottomLeftRadius="3dp" android:topRightRadius="0dp" android:bottomRightRadius="0dp"/>
        </shape>
    </item>
</selector> 

res/drawable/seg_right.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:state_selected="true">
        <shape >
            <stroke android:color="#0079FF" android:width="1dp"/>
            <solid android:color="#0079FF"/>
            <corners android:topLeftRadius="0dp" android:bottomLeftRadius="0dp" android:topRightRadius="3dp" android:bottomRightRadius="3dp"/>
        </shape>
    </item>
    <item>
        <shape >
            <stroke android:color="#0079FF" android:width="1dp"/>
            <solid android:color="#FFFFFF"/>
            <corners android:topLeftRadius="0dp" android:bottomLeftRadius="0dp" android:topRightRadius="3dp" android:bottomRightRadius="3dp"/>
        </shape>
    </item>
</selector> 

字体颜色: res/drawable/seg_text_color_selector.xml

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android" >
        <item android:state_selected="true" android:color="#FFFFFF"/>
        <item android:color="#0079FF"/>
    </selector>  
    package cn.haiwan.app.widget;  

    import org.xmlpull.v1.XmlPullParser;  

    import android.R.integer;
    import android.content.Context;
    import android.content.res.ColorStateList;
    import android.util.AttributeSet;
    import android.util.TypedValue;
    import android.view.Gravity;
    import android.view.View;
    import android.widget.LinearLayout;
    import android.widget.TextView;
    import cn.haiwan.R;  

    public class SegmentView extends LinearLayout {
        private TextView textView1;
        private TextView textView2;
        private onSegmentViewClickListener listener;
        public SegmentView(Context context, AttributeSet attrs) {
            super(context, attrs);
            init();
        }  

        public SegmentView(Context context) {
            super(context);
            init();
        }  

        private void init() {
    //      this.setLayoutParams(new LinearLayout.LayoutParams(dp2Px(getContext(), 60), LinearLayout.LayoutParams.WRAP_CONTENT));
            textView1 = new TextView(getContext());
            textView2 = new TextView(getContext());
            textView1.setLayoutParams(new LayoutParams(0, LayoutParams.WRAP_CONTENT, 1));
            textView2.setLayoutParams(new LayoutParams(0, LayoutParams.WRAP_CONTENT, 1));
            textView1.setText("SEG1");
            textView2.setText("SEG2");
            XmlPullParser xrp = getResources().getXml(R.drawable.seg_text_color_selector);
            try {
                ColorStateList csl = ColorStateList.createFromXml(getResources(), xrp);
                textView1.setTextColor(csl);
                textView2.setTextColor(csl);
              } catch (Exception e) {
            }
            textView1.setGravity(Gravity.CENTER);
            textView2.setGravity(Gravity.CENTER);
            textView1.setPadding(3, 6, 3, 6);
            textView2.setPadding(3, 6, 3, 6);
            setSegmentTextSize(16);
            textView1.setBackgroundResource(R.drawable.seg_left);
            textView2.setBackgroundResource(R.drawable.seg_right);
            textView1.setSelected(true);
            this.removeAllViews();
            this.addView(textView1);
            this.addView(textView2);
            this.invalidate();  

            textView1.setOnClickListener(new OnClickListener() {  

                @Override
                public void onClick(View v) {
                    if (textView1.isSelected()) {
                        return;
                    }
                    textView1.setSelected(true);
                    textView2.setSelected(false);
                    if (listener != null) {
                        listener.onSegmentViewClick(textView1, 0);
                    }
                }
            });
            textView2.setOnClickListener(new OnClickListener() {  

                @Override
                public void onClick(View v) {
                    if (textView2.isSelected()) {
                        return;
                    }
                    textView2.setSelected(true);
                    textView1.setSelected(false);
                    if (listener != null) {
                        listener.onSegmentViewClick(textView2, 1);
                    }
                }
            });
        }  

        public void setSegmentTextSize(int dp) {
            textView1.setTextSize(TypedValue.COMPLEX_UNIT_DIP, dp);
            textView2.setTextSize(TypedValue.COMPLEX_UNIT_DIP, dp);
        }  

        private static int dp2Px(Context context, float dp) {
            final float scale = context.getResources().getDisplayMetrics().density;
            return (int) (dp * scale + 0.5f);
        }  

        public void setOnSegmentViewClickListener(onSegmentViewClickListener listener) {
            this.listener = listener;
        }  

        public void setSegmentText(CharSequence text,int position) {
            if (position == 0) {
                textView1.setText(text);
            }
            if (position == 1) {
                textView2.setText(text);
            }
        }  

        public static interface onSegmentViewClickListener{
            public void onSegmentViewClick(View v,int position);
        }
    }  
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >  

    <cn.haiwan.app.widget.SegmentView
        android:layout_width="160dp"
        android:layout_height="wrap_content"android:layout_centerHorizontal="true"
        />
</LinearLayout> 
时间: 2024-10-24 10:21:58

模仿 ios 分段单选的相关文章

最新模仿ios版微信应用源码

http://www.cnblogs.com/chenkaiyuan/p/3695646.html 最新模仿ios版微信应用源码,码迷,mamicode.com

模仿ios下的coverflow

Android高级图片滚动控件,编写3D版的图片轮播器 http://blog.csdn.net/guolin_blog/article/details/17482089 A cool Open Source CoverFlow view for Android with several fancy effects. https://github.com/davidschreiber/FancyCoverFlow 模仿ios下的coverflow,布布扣,bubuko.com

iOS分段选择器、旅行App、标度尺、对对碰小游戏、自定义相册等源码

iOS精选源码 企业级开源项目,模仿艺龙旅行App 标签选择器--LeeTagView CSSegmentedControl常用的分段选择器,简单易用! 仿微信左滑删除 IOS左滑返回 输入框 iOS 基于PhotoKit框架的自定义相册 JHDraw - 画线,画虚线,画五角星,画矩形,画虚线矩形 标度尺 对对碰小游戏 iOS优质博客 iOS无痕埋点方案分享探究 前言当前互联网行业的竞争已经是非常激烈了, "功能驱动"的时代已经过去了, 现在更加注重软件的细节, 以及用户的体验问题.

iOS——UITableView单选模式,多选模式,单选多选混合模式

70行代码量的UITableViewCell实现单选,多选,单选多选混合选择. SingleVC——50行 MultipleVC——55行 ChaosVC——80行 cell为Xib拓展性较好,可拿去直接使用. 代码量不是越少越好,还要容易阅读,这里突出代码量的意思仅仅是建立在简单易用的原则上,有不明白可以跟帖,有大神优化的话跪求恩赐. github: https://github.com/ZyZwei/iOS_SelectStyle.git coding: https://git.coding

用js控制canvas实现的模仿windows上单选、多选及拖动控制的toy program

功能包括:鼠标点击单选.拖动多选.ctrl+单击组合效果.对选中的单个或多个canvas图层通过鼠标拖动.方向键移动.delete删除图层等. 感觉复杂的地方主要在控制逻辑上,下面是全部代码(带注释哦),可以直接复制保存为html文件在浏览器里查看效果 <!DOCTYPE> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312&

Android模仿iOS实现侧滑返回(类似微信)

我们都知道侧滑返回操作是 iOS 里面比较常见的功能,一般是手指在靠近手机屏幕左边缘向右滑动就可以关闭当前的界面,iOS 系统提供了这样的 API,但是 Android 怎么实现呢? 网上找了许多方法,比较了一下,个人觉得还是这个比较方便也容易理解,先上个效果再说: 原理 Activity 本身是不可以滑动的,但是我们可以制造一个正在滑动 Activity 的假象,使得看起来这个 Activity 正在被手指滑动.其原理其实很简单,我们滑动的其实是 Activity 里面的可见View元素,而我

ios 按钮单选框

- (IBAction)btnChoose:(id)sender { _btnConfirm.selected =YES; UIImage *selecticonNo =[UIImage imageNamed:@"未选中"]; UIImage *selecticon =[UIImage imageNamed:@"选中"]; UIButton *btn=nil; for (int i=1;i<REPORTNUMBER;i++) { btn = (UIButton

iOS开发 非常全的三方库、插件、大牛博客等等

UI 下拉刷新 EGOTableViewPullRefresh- 最早的下拉刷新控件. SVPullToRefresh- 下拉刷新控件. MJRefresh- 仅需一行代码就可以为UITableView或者CollectionView加上下拉刷新或者上拉刷新功能.可以自定义上下拉刷新的文字说明.具体使用看"使用方法". (国人写) XHRefreshControl- XHRefreshControl 是一款高扩展性.低耦合度的下拉刷新.上提加载更多的组件.(国人写) CBStoreHo

iOS开发之资料收集

github排名:https://github.com/trending, github搜索:https://github.com/search. 此文章转自github:https://github.com/Tim9Liu9/TimLiu-iOS UI 下拉刷新 EGOTableViewPullRefresh- 最早的下拉刷新控件. SVPullToRefresh- 下拉刷新控件. MJRefresh- 仅需一行代码就可以为UITableView或者CollectionView加上下拉刷新或者