android ListView实现圆角

时势造英雄的经典例子_趋近理想:计量经济学的课程思政第11期 内生性:英雄造时势vs时势造英雄... 《趋近理想:计量经济学的课程思政》第11期 内生性:英雄造时势vs时势造英雄知识点:内生性问题中的互为因果。思政点:互为因果的关系、顺势而为、借力打力。思政导入、融入:这期我们讲“内生性”这一知识点的思政融入,尤其是关于互为因果所导致的内生性问题,而关于什么是内生性,具体的定义和原理见教材。这里只是举个例子简单的解释下互为因果所导致的内生性问题是啥?一个比较经典的例子就是受教育水平和... 阅读详情

d1.jpg

方法一:定义

1<?xml version ="1.0" encoding ="UTF-8" ?> 
2<shape xmlns:android ="http://schemas.android.com/apk/res/android" android:shape ="rectangle" > 
3       <gradient android:startColor ="#B0BCCD" android:endColor ="#6D84A2" android:angle ="270" /> 
4       <corners android:bottomRightRadius ="8dp" android:bottomLeftRadius ="8dp" android:topLeftRadius ="8dp" 
5              android:topRightRadius ="8dp" /> 
6  
7</shape>

布局文件中的ListView属性android:listSelector="@drawable/shape"

存在问题是,ListView最上面或者最下面的item选中时,圆角背景变成直角的

方法二:修改选中item 

01public class RoundedRectListView extends ListView {   
02        private Context mContext; 
03        public RoundedRectListView( Context context) { 
04                super ( context) ;         
05                this .mContext = context; 
06                init( ) ; 
07        } 
08        public RoundedRectListView( Context context, AttributeSet attrs) { 
09                super ( context, attrs) ; 
10                this .mContext = context; 
11                init( ) ; 
12        } 
13        public RoundedRectListView( Context context, AttributeSet attrs, int defStyle) { 
14                super ( context, attrs, defStyle) ; 
15                this .mContext = context; 
16                init( ) ; 
17        } 
18        protected void init( ) { 
19                setBackgroundDrawable( mContext.getResources ( ) .getDrawable ( R.drawable .background_rounded_white ) ) ; 
20                setCacheColorHint( Color .WHITE ) ; 
21                setFooterDividersEnabled( false ) ; 
22        } 
23        @Override
24        public boolean onInterceptTouchEvent( MotionEvent ev) { 
25   
26                switch ( ev.getAction ( ) ) { 
27                case MotionEvent.ACTION_DOWN : 
28                        int x = ( int ) ev.getX ( ) ; 
29                        int y = ( int ) ev.getY ( ) ; 
30                        int itemnum = pointToPosition( x, y) ; 
31                        if ( itemnum == AdapterView.INVALID_POSITION ) 
32                                break ;                   
33                        else 
34                        {  
35                                if ( itemnum== 0) { 
36                                        if ( itemnum== ( getAdapter( ) .getCount ( ) - 1) ) 
37                                                setSelector( R.drawable .listview_selection_shade_rounded ) ; 
38                                        else 
39                                                setSelector( R.drawable .listview_selection_shade_top_rounded ) ; 
40                                } 
41                                else if ( itemnum== ( getAdapter( ) .getCount ( ) - 1) ) 
42                                        setSelector( R.drawable .listview_selection_shade_bottom_rounded ) ; 
43                                else 
44                                        setSelector( R.drawable .listview_selection_shade ) ;                       
45                        } 
46                        break ; 
47                case MotionEvent.ACTION_UP : 
48                        break ; 
49                } 
50                return true ;     
51        }       
52}

方法三:定义selector

01public class RoundedRectListView extends ListView {     
02        private Context mContext; 
03   
04        public RoundedRectListView( Context context) { 
05                super ( context) ;         
06                this .mContext = context; 
07                init( ) ; 
08        } 
09        public RoundedRectListView( Context context, AttributeSet attrs) { 
10                super ( context, attrs) ; 
11                this .mContext = context; 
12                init( ) ; 
13        } 
14        public RoundedRectListView( Context context, AttributeSet attrs, int defStyle) { 
15                super ( context, attrs, defStyle) ; 
16                this .mContext = context; 
17                init( ) ; 
18        } 
19        protected void init( ) { 
20                setBackgroundDrawable( mContext.getResources ( ) .getDrawable ( R.drawable .background_rounded_white ) ) ; 
21                setCacheColorHint( Color .WHITE ) ; 
22                setFooterDividersEnabled( false ) ; 
23        } 
24        @Override
25        public boolean onInterceptTouchEvent( MotionEvent ev) { 
26   
27                switch ( ev.getAction ( ) ) { 
28                case MotionEvent.ACTION_DOWN : 
29                        int x = ( int ) ev.getX ( ) ; 
30                        int y = ( int ) ev.getY ( ) ; 
31                        int itemnum = pointToPosition( x, y) ; 
32   
33                        if ( itemnum == AdapterView.INVALID_POSITION ) 
34                                break ;                   
35                        else 
36                        {  
37                                if ( itemnum== 0) { 
38                                        if ( itemnum== ( getAdapter( ) .getCount ( ) - 1) ) 
39                                                setSelector( R.drawable .listview_selection_shade_rounded ) ; 
40                                        else 
41                                                setSelector( R.drawable .listview_selection_shade_top_rounded ) ; 
42                                } 
43                                else if ( itemnum== ( getAdapter( ) .getCount ( ) - 1) ) 
44                                        setSelector( R.drawable .listview_selection_shade_bottom_rounded ) ; 
45                                else 
46                                        setSelector( R.drawable .listview_selection_shade ) ;                       
47                        } 
48                        break ; 
49                case MotionEvent.ACTION_UP : 
50                        break ; 
51                } 
52                return true ;     
53        }       
54}

方法四:方法二和方法三的结合

001public class RoundedRectListView extends ListView {   
002  
003        private Context mContext; 
004   
005        public RoundedRectListView( Context context) { 
006                super ( context) ;         
007                this .mContext = context; 
008                init( ) ; 
009        } 
010        public RoundedRectListView( Context context, AttributeSet attrs) { 
011                super ( context, attrs) ; 
012                this .mContext = context; 
013                init( ) ; 
014        } 
015        public RoundedRectListView( Context context, AttributeSet attrs, int defStyle) { 
016                super ( context, attrs, defStyle) ; 
017                this .mContext = context; 
018                init( ) ; 
019        } 
020       protected void init( ) { 
021                setBackgroundDrawable( mContext.getResources ( ) .getDrawable ( R.drawable .background_rounded_white ) ) ; 
022                setCacheColorHint( Color .WHITE ) ; 
023                setFooterDividersEnabled( false ) ;         
024                setSelector( new Selector( RoundedRectListView.this ,- 1) ) ; 
025        } 
026   @Override
027        public boolean onInterceptTouchEvent( MotionEvent ev) { 
028                switch ( ev.getAction ( ) ) { 
029                case MotionEvent.ACTION_DOWN : 
030                        int x = ( int ) ev.getX ( ) ; 
031                        int y = ( int ) ev.getY ( ) ; 
032                        int itemnum = pointToPosition( x, y) ; 
033                        if ( itemnum == AdapterView.INVALID_POSITION ) 
034                                break ;                   
035                        else 
036                        {               
037                           setSelector( new Selector( RoundedRectListView.this ,itemnum) ) ;                 
038                        } 
039                        break ; 
040                case MotionEvent.ACTION_UP : 
041                        break ; 
042                } 
043                return true ;     
044        } 
045    class Selector extends Drawable { 
046        private static final String TAG = "Selector" ; 
047        private Paint mPaint; 
048        private AdapterView mList; 
049        private RectF mRectF; 
050        private int position; 
051          
052        public Selector( AdapterView list,int position) { 
053            mList = list; 
054            mPaint = new Paint ( ) ; 
055            mRectF = new RectF( ) ; 
056            this .position = position 
057  
058            LinearGradient g= new LinearGradient( mRectF.top ,mRectF.left ,mRectF.right ,mRectF.bottom ,Color .parseColor ( "#058cf5" ) ,Color .parseColor ( "#015fe6" ) ,TileMode.REPEAT ) ;   
059  
060    mPaint.setShader ( g) ; 
061        } 
062        @Override
063        public void draw( Canvas canvas) { 
064            Rect b = getBounds( ) ; 
065            int mPosition = mList.getSelectedItemPosition ( ) ; 
066            if ( mPosition==- 1) { 
067                mPosition= position; 
068            } 
069            Log.d ( TAG, "Position :" + mPosition) ; 
070            canvas.save ( ) ; 
071            canvas.clipRect ( b.left , b.top , b.right , ( b.bottom + b.top ) / 2) ; 
072            drawHalf( canvas, b, mPosition == 0) ; 
073            canvas.restore ( ) ; 
074            canvas.save ( ) ; 
075            canvas.clipRect ( b.left , ( b.bottom + b.top ) / 2, b.right , b.bottom ) ; 
076            drawHalf( canvas, b, mPosition == mList.getAdapter ( ) .getCount ( ) - 1 && b.bottom == mList.getHeight ( ) ) ; 
077            canvas.restore ( ) ; 
078            Log.d ( TAG, "draw " + b) ; 
079        } 
080        private void drawHalf( Canvas canvas, Rect b ,boolean round) {           
081                  
082            if ( round) { 
083                mRectF.set ( b) ; 
084                canvas.drawRoundRect ( mRectF, 10, 10, mPaint) ;               
085            } else { 
086                canvas.drawRect ( b, mPaint) ;               
087            } 
088        } 
089        @Override
090        public int getOpacity( ) { 
091            return 0 ; 
092        } 
093        @Override
094        public void setAlpha( int alpha) { 
095        } 
096        @Override
097        public void setColorFilter( ColorFilter cf) { 
098        } 
099    } 
100}

方法五:

01public class RoundedRectListView extends ListView { 
02    private static final float RADIUS = 16 ; 
03    private Path mClip; 
04    public RoundedRectListView( Context context, AttributeSet attrs) { 
05        super ( context, attrs) ; 
06        init( ) ; 
07    } 
08    private void init( ) { 
09        GradientDrawable gd = new GradientDrawable( ) ; 
10        gd.setCornerRadius ( RADIUS) ; 
11        gd.setColor ( 0xff208020) ; 
12        setBackgroundDrawable( gd) ; 
13        setCacheColorHint( 0) ; 
14        setVerticalFadingEdgeEnabled( false ) ; 
15        StateListDrawable sld = new StateListDrawable( ) ; 
16        sld.addState ( 
17                PRESSED_ENABLED_STATE_SET, 
18                new GradientDrawable( Orientation.LEFT_RIGHT , new int [ ] { 0xffa58cf5, 0xffa13f99} ) ) ; 
19        sld.addState ( 
20                EMPTY_STATE_SET,
21                new GradientDrawable( Orientation.LEFT_RIGHT , new int [ ] { 0xff058cf5, 0xff013f99} ) ) ; 
22        setSelector( sld) ; 
23    } 
24    @Override
25    protected void onSizeChanged( int w, int h, int oldw, int oldh) { 
26        super .onSizeChanged ( w, h, oldw, oldh) ; 
27        mClip = new Path( ) ; 
28        RectF rect = new RectF( 0, 0, w, h) ; 
29        mClip.addRoundRect ( rect, RADIUS, RADIUS, Direction.CW ) ; 
30    } 
31   @Override
32    protected void dispatchDraw( Canvas canvas) { 
33        canvas.save ( ) ; 
34        canvas.clipPath ( mClip) ; 
35        super .dispatchDraw ( canvas) ; 
36        canvas.restore ( ) ; 
37    } 
38}

第五种方法最好 
清华大学交叉信息研究院:理论驱动的前沿计算科学教育生态 计算科学作为现代信息技术的基石,其核心在于通过算法与数据结构解决复杂问题。理论计算机科学(TCS)从计算复杂性、算法设计等基础层面,定义了计算的本质与极限。这一理论驱动的研究范式,为人工智能、量子计算等前沿领域提供了坚实的原理支撑,推动了从基础算法到产业应用的持续创新。在高等教育场景中,这种强调深度理论结合实践探索的培养模式,旨在塑造具备源头创新能力的科研人才。清华大学交叉信息研究院正是这一理念的实践高地,其独特的学术生态聚焦于理论计算机科学、人工智能与交叉、量子信息科学等核心方向,通过高强度的课程训练与科 阅读详情

相关推荐

Stata入门必学:数据管理+统计分析+回归建模全攻略!附三本经典教材推荐​——从界面操作到模型构建,手把手解锁经济学与社会学数据分析技能

本文介绍了Stata软件的基础操作与核心功能,包括数据管理、统计分析、回归建模等内容。文章首先概述Stata作为经济学、社会学等领域首选工具的定位优势,详细说明其界面窗口和文件类型。重点讲解了数据导入导出、清洗处理、描述统计与可视化等核心技能,并演示了回归分析命令与结果解读要点。最后推荐了三本权威Stata教材:《Stata统计分析从入门到精通》《Stata统计学与案例应用精解》和《Stata统计分析商用建模与综合案例精解》,这些书籍涵盖从基础到论文写作的全流程指导,配有丰富案例和教学资源,适合不同层次学习

m0_72274883的博客 1407

Android强制控件圆角实现

Android圆角Tag控件的另类实现 http://blog.youkuaiyun.com/yutao52shi/article/details/46995591

清北公开课寻课地图:视频平台自学名校课程全攻略

在线教育资源的爆发让名校公开课不再是象牙塔里的奢侈品。从MOOC平台到视频网站,课程获取渠道看似众多,但如何高效筛选出高质量内容,成为自学者面临的核心痛点。理解公开课资源的分布逻辑与平台特性,是利用好这些知识富矿的前提:官方课程平台提供系统完整的教学体系,而视频平台则以碎片化切片、弹幕共学和算法推荐构建了更轻量、更高效的学习场景。对于希望跨专业补基础、备考冲刺或拓展认知边界的用户而言,掌握关键词搜索、合集判断、收藏夹管理等实操技巧,能大幅提升自学效率。本文基于对清北公开课资源的深度梳理,整理出一份覆盖官方直

weixin_28314575的博客 238

ListView圆角实现

ScondActivity.java package mykotlin.zhoujian.com.myapplication.activity; import android.app.Activity; import android.os.Bundle; import android.widget.SimpleAdapter; import java.util.ArrayList; imp...

蓝枫 1043

应用金融硕士研究生精读书目

应用金融硕士研究生精读书目陈雨露、张杰、瞿强联合推荐 2004-12-7 1、《经济学原理》 N·格里高利·曼昆 (N.Gregory Mankiw),中国人民大学出版社。2、《应用经济计量学》 拉姆·拉玛纳山(Ramu Ramanathan),机械工业出版社。3、《货币金融学》 弗雷德里克·S·米什金 (Fredcric S.Mishkin),中国人民大学出版社。4、《金融学》 兹维·博迪、...

GrayEagle的博客 4145

人工智能原理(书籍推荐)

《人工智能原理》书籍推荐 王文敏,《人工智能原理》,高等教育出版社,2019年8月28日出版。 内容简介 本书对人工智能学科及其研究领域进行抽象,梳理出一个人工智能的研究体系,然后再按照这个体系讲述其原理,再穿插一些实例。全书分为五篇、共十四章。这五篇分别是人工智能的体系、求解、规划、学习、以及推理。 体系篇中有两章,即绪论与体系论。其次,求解篇分成四章,讲述搜索问题、优化问题、博弈问题、以及约...

William0228的博客 3771

Android 实现圆角ListView 几种方法

方法一:定义 <corners android:bottomRightRadius ="8dp" android:bottomLeftRadius ="8dp" android:topLeftRadius ="8dp" android:topRightRadius ="8dp" /> 布局文件中的List

Tivon_S 744

AI赋能统计学教育革新:构建“原理-实战-思维”三位一体的数据科学人才培养体系——Python+SPSS+Stata系列教材解析与实践路径

本文系统介绍了数据分析教育领域的优质教材资源。针对Python数据分析,推荐《Python机器学习原理与算法实现》和《Python数据科学应用从入门到精通》两本清华大学出版社的入门书籍;SPSS学习推荐杨维忠、张甜的四部曲教材,涵盖基础操作到实证研究应用;Stata领域则推荐《Stata统计分析从入门到精通》等三本教材,特别适合计量经济学基础薄弱但需要完成实证研究的学习者。这些教材均配有丰富案例、视频讲解和配套资源,采用理论+实践的教学模式,有效降低学习门槛,帮助读者快速掌握数据统计。

m0_72274883的博客 1360

android控件向内弧度_Android几种方式实现控件圆角

目前想到的能实现圆角的方式有这么几种:1、使用shape元素(比较常用)2、使用背景图片(有点蠢,还得让UI切图,不建议这种方式)3、自定义控件实现4、使用ViewOutlineProvider裁剪view5、使用cardView6、其他第三方库下面来详细说明一下,如何用上面的方式实现圆角Button:1、使用shape元素在drawable文件夹中新建一个shape.xml文件,之后布局文件中设...

weixin_39614874的博客 1161

Python、Stata、SPSS的区别和适用场景、学习难度分别是什么?怎么从入门到精通?Python学习曲线陡峭但通用性强,Stata呈中等坡度需统计基础,SPSS以平缓曲线实现快速入门

Python、Stata和SPSS是三大主流数据分析工具,各具优势。Python作为通用编程语言,适合复杂数据处理和机器学习;Stata专精计量经济学分析,内置高级统计模型;SPSS以图形化界面见长,适合快速完成基础统计分析。针对不同需求,推荐相关学习资料:Python领域推荐杨维忠、张甜的新书;SPSS学习推荐四本经典教材;Stata应用推荐三本实用教程。这些书籍均提供丰富的配套资源,适合不同基础的学习者。

m0_72274883的博客 2686

Stata零基础速通指南|数据管理+统计分析+可视化全流程实战,附三本权威教材

摘要:本文系统介绍了Stata软件的核心操作要点,涵盖数据管理(导入导出、清洗预处理)、统计分析(描述统计、分组统计)和数据可视化(基础图形、进阶图表)三大模块。重点解析了常用命令如数据加载(use/import)、变量操作(gen/rename)、回归分析(regress)等,并提供了异常值处理、结果导出等实用技巧。文末推荐了三本权威学习教材,特别适合零基础学习者快速掌握Stata在实证研究中的应用,配套资源丰富,案例涵盖经济、医学等多领域。通过本文可系统掌握Stata基础操作,为科研数据分析提供有效工具

m0_72274883的博客 2256

Android设置圆角看着一篇文章就够了

方法1:Outline 方法2:CardView 方法3:自定义Drawable .....你还知道哪些优雅的方式来设置圆角,可以分享出来共同学习

dream.zhou 1万+

经济与金融专业认知与介绍

经济与金融专业旨在培养具备宏观经济学和金融学知识、具有较强的理论研究和实践能力的高级应用型人才。

分享各种技术文章,给大家带来不一样的视野。 414

android 内凹的圆角,css实现内凹圆角样式

最新开发遇到一个弹框,弹框中间有两个内凹的半圆,而且还是透明的,不能遮挡到底层的内容。基于这个需求,找到了一个比较好的实现方法。先上一下demo效果图:image.png实现这个效果主要是用了background-image 结合径向渐变radial-gradient。示例:background-image: radial-gradient(circle 10px at 0 100%, trans...

weixin_30952479的博客 1066

【简历全景认知4】简历筛选的底层逻辑:当HR的显微镜遇上求职者的盲盒

99%的人根本不知道,当你的简历被HR点开的0.3秒内,已经经历了三重宇宙的降维打击。

FoyoDesigner的博客 1031

SPSS基础操作:对数据进行加权处理

对数据进行加权处理是我们使用SPSS提供某些分析方法的重要前提。对数据进行加权后,当前的权重将被保存在数据中。当进行相应的分析时,用户无须再次进行加权操作。本节以对广告的效果观测为例,讲解数据的加权操作。本例给出了消费者购买行为与是否看过广告之间的联系,按“是否看过广告”和“是否购买商品”两个标准,消费者被分为4类,研究者对这4类消费者分别进行了调查。由于各种情况下调查的人数不同,如果将4种情况等同进行分析,势必由于各种情况的观测数目不同导致分析的偏误,因此我们需要对观测量进行加权。

m0_72274883的博客 7169

Stata小白必看:如何用3本书搞定计量经济学论文(附避坑指南)

本文为Stata初学者提供了一份计量经济学论文速成指南,推荐了三本实用教材帮助避开学术陷阱。从基础操作到高级建模,涵盖数据清洗、回归分析、结果呈现等关键环节,并分享实战技巧如变量命名、稳健性检验和图表美化,助力快速完成高质量实证研究。

weixin_29274969的博客 109

区块链存证在数字版权保护系统中的司法应用

2023年德国慕尼黑地方法院审理的"跨国音乐版权纠纷案"中,通过DORIS系统调取的存证数据覆盖了12个司法管辖区,证明区块链存证能有效解决跨境证据认定难题。清华大学李华教授团队的研究表明,区块链存证在版权纠纷中的证据采信率已达91.7%,显著高于传统电子证据的67.3%。根据国际标准化组织(ISO)的《区块链参考架构标准》(ISO/IEC 23894:2020),哈希算法与时间戳的结合能够实现每笔存证数据的唯一性标识。2)建立司法区块链联盟链(参考中国司法区块链2.0架构);

2503_92418511的博客 1257
上一篇: Android远程图片获取和本地缓存
下一篇: struts2标签防止重复提交
onlywaitforyou
博客等级 码龄15年 6粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值