Android下基于XML的Graphics shape使用方法
shape文件的操作
shape⽂件的操作⼀、maven依赖引⼊<dependency><groupId>org.geotools</groupId><artifactId>gt-api</artifactId><exclusions><exclusion><groupId>commons-pool</groupId><artifactId>commons-pool</artifactId></exclusion><exclusion><groupId>jgridshift</groupId><artifactId>jgridshift</artifactId></exclusion><exclusion><groupId>Javax.media</groupId><artifactId>jai_core</artifactId></exclusion></exclusions></dependency><dependency><groupId>commons-pool</groupId><artifactId>commons-pool</artifactId></dependency><dependency><groupId>jgridshift</groupId><artifactId>jgridshift</artifactId></dependency><dependency><groupId>Javax.media</groupId><artifactId>jai_core</artifactId></dependency><dependency><groupId>org.geotools</groupId><artifactId>gt-geojson</artifactId></dependency><dependency><groupId>org.geotools</groupId><artifactId>gt-epsg-hsql</artifactId><exclusions><exclusion><groupId>org.hsqldb</groupId><artifactId>hsqldb</artifactId></exclusion></exclusions></dependency><!-- https:///artifact/org.hsqldb/hsqldb --><dependency><groupId>org.hsqldb</groupId><artifactId>hsqldb</artifactId><scope>test</scope></dependency><dependency><groupId>org.geotools</groupId><artifactId>gt-shapefile</artifactId></dependency><dependency><groupId>com.googlecode.json-simple</groupId><artifactId>json-simple</artifactId></dependency>备注:需要配置下载org.geotools的私有仓库<repositories><repository><id>osgeo</id><name>OSGeo Release Repository</name><url>https:///repository/release/</url><snapshots><enabled>false</enabled></snapshots><releases><enabled>true</enabled></releases></repository></repositories>⼆、读取shape⽂件,并转换为对象Tpublic static List<T>readShape(URL url) throws IOException {ShapefileDataStore store = new ShapefileDataStore(url);//设置编码Charset charset = Charset.forName("GBK");store.setCharset(charset);SimpleFeatureSource sfSource = store.getFeatureSource();SimpleFeatureIterator sfIter = sfSource.getFeatures().features();// 从ShapeFile⽂件中遍历每⼀个Feature,然后将Feature转为GeoJSON字符串List<T> list = new ArrayList<>();while (sfIter.hasNext()) {SimpleFeature feature = sfIter.next();// Feature转GeoJSONFeatureJSON fjson = new FeatureJSON();StringWriter writer = new StringWriter();fjson.writeFeature(feature, writer);JSONObject jsonObject = new JSONObject(writer.toString());String type = jsonObject.getStr("type").toLowerCase();if (type.equals("multipolygon")){LOGGER.error("该数据不是图斑:【{}】",writer);continue;}String properties = jsonObject.remove("properties").toString();jsonObject.remove("id");//其他属性T t = JSONUtil.toBean(properties, T.class);if (JudgeUtil.isDBNull(t.getObjectid())){LOGGER.error("该图斑每页objectid:【{}】",writer.toString());continue;}//geojsont.setGeojson(jsonObject.toString());list.add(gisWarnQrstbhhx);}return list;}三、shape⽂件写⼊1、写⼊shape⽂件⼊⼝/*** 写shape⽂件* @param rootFile* @param shapeName shape⽂件名包含后缀名.shp* @param list*/public static void writeShape(File rootFile,String shapeName,List<T>list) throws IOException {if (JudgeUtil.isEmpty(list)){throw new WrongDataException("数据不能为空");}String type = new JSONObject(list.get(0).getGeojson()).getStr("type").toLowerCase();//将list转换为geoJson字符串String geoJson = getGsoJson(list);if (!rootFile.exists() || rootFile.isFile()){rootFile.mkdirs();}File file = new File(rootFile,shapeName);Map<String, Serializable> params = new HashMap<>();params.put(ShapefileDataStoreFactory.URLP.key,file.toURI().toURL());ShapefileDataStore ds = (ShapefileDataStore) new ShapefileDataStoreFactory().createNewDataStore(params);//定义图形信息和属性信息SimpleFeatureTypeBuilder tb = new SimpleFeatureTypeBuilder();tb.setCRS(DefaultGeographicCRS.WGS84);tb.setName("shapefile");tb.setDefaultGeometry("the_geom");//添加属性addProperties(type,tb);ds.createSchema(tb.buildFeatureType());//设置编码Charset charset = Charset.forName("GBK");ds.setCharset(charset);FeatureJSON featureJson = new FeatureJSON();SimpleFeatureCollection featureCollection = (SimpleFeatureCollection) featureJson.readFeatureCollection(geoJson);FeatureIterator<SimpleFeature> iterator = featureCollection.features();//设置WriterFeatureWriter<SimpleFeatureType, SimpleFeature> writer = ds.getFeatureWriter(ds.getTypeNames()[0], Transaction.AUTO_COMMIT);//写下⼀条SimpleFeature srcFeature;Iterator<Property> properties;while (iterator.hasNext()){srcFeature = iterator.next();properties = srcFeature.getProperties().iterator();SimpleFeature destFeature = writer.next();while (properties.hasNext()){Name name = properties.next().getName();Object attribute = srcFeature.getAttribute(name);if (!(attribute instanceof Geometry)){destFeature.setAttribute(name, attribute);}}destFeature.setDefaultGeometryProperty(srcFeature.getDefaultGeometryProperty());}writer.write();writer.close();ds.dispose();}2、将List<T>转换为geojson/*** T转geojson* @param list* @return*/private static String getGsoJson(List<T>list){JSONObject jsonObject = new JSONObject();jsonObject.putOnce("type","FeatureCollection");JSONArray jsonArray = new JSONArray();jsonObject.putOnce("features",jsonArray);for (T t : list) {JSONObject feature = new JSONObject();feature.putOnce("type","Feature");feature.putOnce("geometry",new JSONObject(t.getGeojson()));t.setGeojson(null);t.setGeom(null);t.setGid(null);feature.putOnce("properties",JSONUtil.parseObj(t));jsonArray.add(feature);}return jsonObject.toString();}3、通过反射添加properties/*** 通过反射添加properties* @param tb*/private static void addProperties(String type, SimpleFeatureTypeBuilder tb){Field[] declaredFields = T.class.getDeclaredFields();setType(tb,type.toLowerCase());for (Field declaredField : declaredFields) {String name = declaredField.getName();if (!name.equals("serialVersionUID") && !name.equals("geojson") && !name.equals("geom")){ tb.add(name,declaredField.getType());}}}4、设置类型private static void setType(SimpleFeatureTypeBuilder tb,String type){if (type.equals("point")) {tb.add("the_geom", Point.class);} else if (type.equals("line")) {tb.add("the_geom", LineString.class);} else if (type.equals("polygon")) {tb.add("the_geom", Polygon.class);} else if (type.equals("multipoint")) {tb.add("the_geom", MultiPoint.class);} else if (type.equals("multiline")) {tb.add("the_geom", MultiLineString.class);} else if (type.equals("multipolygon")) {tb.add("the_geom", MultiPolygon.class);}}。
androidshape的使用及渐变色、分割线、边框、半透明阴影
androidshape的使⽤及渐变⾊、分割线、边框、半透明阴影shape使⽤、渐变⾊、分割线、边框、半透明、半透明阴影效果。
⾸先简单了解⼀下shape中常见的属性。
(详细介绍参看)<?xml version="1.0" encoding="utf-8"?><shapexmlns:android="/apk/res/android"android:shape=["rectangle" | "oval" | "line" | "ring"] > --- 默认为rectangle<corners -- shape=“rectangle”时使⽤,android:radius="integer" -- 半径,会被下边的属性覆盖,默认为1dp,android:topLeftRadius="integer"android:topRightRadius="integer"android:bottomLeftRadius="integer"android:bottomRightRadius="integer" /><gradient -- 渐变android:angle="integer"android:centerX="integer"android:centerY="integer"android:centerColor="integer"android:endColor="color"android:gradientRadius="integer"android:startColor="color"android:type=["linear" | "radial" | "sweep"]android:useLevel=["true" | "false"] /><paddingandroid:left="integer"android:top="integer"android:right="integer"android:bottom="integer" /><size -- 指定⼤⼩,⼀般⽤在imageview配合scaleType属性使⽤。
android shape ring用法
android shape ring用法Android Shape Ring 是Android 平台上的一个可用于创建自定义环形形状的图形资源。
它可以用于各种控件或背景中,为用户提供更加个性化和独特的界面设计。
本文将详细介绍Android Shape Ring 的用法,包括创建、配置和应用环形形状资源的各个步骤,帮助开发者更好地使用这个功能来打造精美的用户界面。
第一步:了解Shape Drawable在开始之前,让我们先了解一下Shape Drawable。
Shape Drawable 是指由XML 文件定义的矢量图形资源,可以用于绘制各种形状,例如矩形、圆形、椭圆等。
通过在XML 中使用Shape Drawable,开发者可以轻松地创建独特的背景或前景形状,并将其应用于Android 应用的各个界面元素中。
第二步:创建shape_ring.xml 文件首先,我们需要创建一个名为shape_ring.xml 的XML 文件,用于定义环形的形状资源。
在res/drawable 文件夹中创建一个新的XML 文件,并将其命名为shape_ring.xml。
第三步:定义环形形状在shape_ring.xml 文件中,我们需要使用<shape> 元素来定义环形的形状。
下面是一个示例的shape_ring.xml 文件的代码:xml<shape xmlns:android="android:shape="ring"android:useLevel="false"><solid android:color="#FF0000" /><size android:width="50dp"android:height="50dp" /><gradient android:type="linear"android:startColor="#FFFF00"android:endColor="#00FF00" /><stroke android:color="#000000"android:width="1dp" /></shape>在上面的代码中,我们使用了`<shape>` 元素,并设置了`android:shape` 属性为"ring",以创建一个环形的形状资源。
androidshape使用总结电脑资料
android shape使用总结电脑资料今天使用到shape,这个里面有很多属性,在这里我记录一下各个属性的使用的情况以及所代表的意思复制代码xmlns:android="schemas.android./apk/res/android" android:shape=["rectangle" | "oval" | "line" | "ring"] > android:radius="integer"android:topLeftRadius="integer"android:topRightRadius="integer"android:bottomLeftRadius="integer"android:bottomRightRadius="integer" />android:angle="integer"android:centerX="integer"android:centerY="integer"android:centerColor="integer"android:endColor="color"android:gradientRadius="integer"android:startColor="color"android:type=["linear" | "radial" | "sweep"]android:useLevel=["true" | "false"] />android:left="integer"android:top="integer"android:right="integer"android:bottom="integer" />android:width="integer"android:height="integer" />android:color="color" />android:width="integer"android:color="color"android:dashWidth="integer"android:dashGap="integer" />复制代码上面这段就是shape使用的格式,来看一下如何使用:定义这是一个GradientDrawable,必须作为根元素,android:shape定义shape的值,必须是下面的之一:"rectangle" 矩阵,这也是默认的shape"oval" 椭圆"line" 一条水平的直线。
在Android中需要通过graphics类来显示2D图形
在Android中需要通过graphics类来显示2D图形。
graphics中包括了Canvas(画布)、Paint(画笔)、Color(颜色)、Bitmap(图像)等常用的类。
graphics具有绘制点、线、颜色、2D几何图形、图像处理等功能。
1.Color(颜色)类Android系统中颜色的常用表示方法有以下3种:(1)int color = Color.BLUE;(2)int color = Color.argb(150,200,0,100);(3)在xml文件中定义颜色;在实际应用当中,我们常用的颜色有以下一些,其颜色常量及其表示的颜色如下所示:Color.BLACK 黑色Color.GREEN 绿色Color.BLUE 蓝色Color.LTGRAY 浅灰色Color.CYAN 青绿色 Color.MAGENTA 红紫色Color.DKGRAY 灰黑色 Color.RED 红色Color.YELLOW 黄色 Color.TRANSPARENT 透明Color.GRAY 灰色Color.WHITE 白色2.Paint(画笔)类要绘制图形,首先得调整画笔,按照自己的开发需要设置画笔的相关属性。
Pain类的常用属性设置方法如下:setAntiAlias(); //设置画笔的锯齿效果setColor(); //设置画笔的颜色setARGB(); //设置画笔的A、R、G、B值setAlpha(); //设置画笔的Alpha值setTextSize(); //设置字体的尺寸setStyle(); //设置画笔的风格(空心或实心)setStrokeWidth(); //设置空心边框的宽度getColor(); //获取画笔的颜色3.Canvas(画布)类画笔属性设置好之后,还需要将图像绘制到画布上。
Canvas类可以用来实现各种图形的绘制工作,如绘制直线、矩形、圆等等。
Canvas绘制常用图形的方法如下:绘制直线:canvas.drawLine(float startX, float startY, float stopX, float stopY, Paint paint);绘制矩形:canvas.drawRect(float left, float top, float right, float bottom, Paint paint);绘制圆形:canvas.drawCircle(float cx, float cy, float radius, Paint paint);绘制字符:canvas.drawText(String text, float x, float y, Paint paint);绘制图形:canvas.drawBirmap(Bitmap bitmap, float left, float top, Paint paint);4.自定义View的基本实现方法首先,我们需要自定义一个类,比如MyView,继承于View类。
android通过shape设置圆形按钮
android通过shape设置圆形按钮Android中常常使⽤shape来定义控件的⼀些显⽰属性来美化UI;shape的常⽤属性有:(1)solid:填充,设置填充的颜⾊;(2)stroke:描边,设置边界的宽度、颜⾊等;(3)corners:圆⾓,五个属性,全部设置的话,会覆盖; android:radius="20dp" 设置四个⾓的半径 android:topLeftRadius="20dp" 设置左上⾓的半径 android:topRightRadius="20dp" 设置右上⾓的半径 android:bottomLeftRadius="20dp" 设置右下⾓的半径 android:bottomRightRadius="20dp" 设置左下⾓的半径(4)padding:定义内容离边界的距离,其中的属性类似于android:padding_left,android:padding_right;(5)gradient:对应颜⾊渐变;当设置填充颜⾊后,⽆渐变效果,android:angle 是指从哪个⾓度开始变,angle的值必须是45的倍数(包括0),仅在type="linear"有效,不然会报错;(6)size:设置⼤⼩;例如:activity_main.xml<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:text="@string/hello_world"android:textSize="30sp" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="horizontal" ><Buttonandroid:id="@+id/roundButton"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="15dp"android:background="@layout/shape1"android:text="@string/button1" /><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="15dp"android:background="@layout/shape2"android:text="@string/button1" /><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="15dp"android:background="@layout/shape3"android:text="@string/button1" /></LinearLayout></LinearLayout>shape1.xml:<?xml version="1.0" encoding="UTF-8"?><shape xmlns:android="/apk/res/android"android:shape="rectangle" ><!-- 填充的颜⾊ --><solid android:color="#99FFFF" /><!-- 设置按钮的四个⾓为弧形 --><corners android:radius="20dp" /><!-- padding:Button⾥⾯的⽂字与Button边界的间隔 --><paddingandroid:bottom="10dp"android:left="10dp"android:right="10dp"android:top="10dp" /></shape>shape2.xml<?xml version="1.0" encoding="UTF-8"?><shape xmlns:android="/apk/res/android" android:shape="rectangle" ><!-- 填充的颜⾊ --><solid android:color="#FFCC66" /><!-- 设置按钮的左下⾓和右下⾓是圆形边框 --><cornersandroid:bottomLeftRadius="20dp"android:bottomRightRadius="20dp" /><!-- 描边 --><strokeandroid:width="1dp"android:color="#000000" /><!-- padding:Button⾥⾯的⽂字与Button边界的间隔 --><paddingandroid:bottom="10dp"android:left="10dp"android:right="10dp"android:top="10dp" /></shape>shape3.xml<?xml version="1.0" encoding="UTF-8"?><shape xmlns:android="/apk/res/android" android:shape="rectangle" ><!-- 填充的颜⾊ --><solid android:color="#996600" /><!-- 设置按钮的左上⾓和右上⾓为圆形边框 --><cornersandroid:topLeftRadius="20dp"android:topRightRadius="20dp"/><!-- padding:Button⾥⾯的⽂字与Button边界的间隔 --><paddingandroid:bottom="10dp"android:left="10dp"android:right="10dp"android:top="10dp" /></shape>MainActivity.javapackage com.xiaozhang.listview2;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.Toast;public class MainActivity extends Activity {Button roundButton;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);roundButton = (Button) findViewById(R.id.roundButton);roundButton.setOnClickListener(new OnClickListener() {public void onClick(View v) {Toast.makeText(MainActivity.this, "你点击了圆⾓按钮", Toast.LENGTH_LONG) .show();}});}}。
android圆角矩形框xml的实现
android圆⾓矩形框xml的实现设置边框圆⾓可以在drawable-mdpi⽬录⾥定义⼀个xml:1. <?xml version="1.0" encoding="utf-8"?>2. <shape xmlns:android="/apk/res/android">3. <solid android:color="#000000" />4. <corners android:topLeftRadius="10dp"5. android:topRightRadius="10dp"6. android:bottomRightRadius="10dp"7. android:bottomLeftRadius="10dp"/>8. </shape>解释:solid的表⽰填充颜⾊,为了简单,这⾥⽤的是⿊⾊。
⽽corners则是表⽰圆⾓,注意的是这⾥bottomRightRadius是左下⾓⽽不是右下⾓,bottomLeftRadius右下⾓。
当然上⾯的效果也可以像下⾯⼀样设置,如下:1. <corners android:radius="5dp" />如果想引⽤这个xml,只需要@drawable/corners_bg.xml即可:1. android:background="@drawable/corners_bg"main.xml:1. <?xml version="1.0" encoding="utf-8"?>2. <LinearLayout xmlns:android="/apk/res/android"3. android:orientation="vertical" android:layout_width="fill_parent"4. android:layout_height="fill_parent" android:background="#FFFFFF">5. <RelativeLayout android:id="@+id/login_div"6. android:layout_width="fill_parent" android:layout_height="150dip"7. android:padding="15dip" android:layout_margin="15dip"8. android:background="@drawable/corners_bg">9. </RelativeLayout>10. </LinearLayout>11.。
Android中的动画(XML方式)实践(逐帧动画与补间动画)
Android中的动画(XML方式)实践(逐帧动画与补间动画)属性动画。
逐帧动画:基于单元格的动画,每一帧显示一个不同的drawable。
一帧一帧的顺序播放。
补间动画:补间动画应用于view,通过对其位置,大小,旋转和透明度的改变,让view动起来。
属性动画:属性动画几乎可以让应用程序中任何对象动起来。
所有补间动画的内容,都可以通过属性动画实现。
下面逐一介绍:注:这篇文章偏重于以xml方式实现相应动画效果。
逐帧动画逐帧动画(Frame-by-frame Animations)从字面上理解就是一帧一帧的播放图片,类似卡通动画。
目标:实现如下图效果:loading步骤:1.在res/drawable目录下新建loading_frame.xml文件:loading_frame.xml根节点是animation-list,内部由一到多个<item>节点组成oneshot属性表示是否只播放一次(true:一次;false:循环播放).item节点声明是一个动画帧,其中 android:drawable属性定义要显示的图像,android:druation代表此帧持续的时间,毫秒为单位。
注:在AndroidStudio中强制规定带animation-list节点xml文件必须放在res/drawable文件下(eclipse(ADT)貌似支持任意放res/drawable和res/anim)。
在androidStudio中若放在res/anim下会报错:错误提示:1错误提示:22.新建页面布局activity_frame.xml:如上图布局很简单上面一个imageview,下面两个button,都水平居中(相对于parent)。
3.新建FrameActivityframeActivity主要逻辑代码当然为了避免animationDrawable带来的内存泄露,建议在onDestroy方法中做如下操作:onDestroy注意:帧数比较多的动画不建议用逐帧动画实现,其一会显得卡顿,其二容易引起OOM。
AndroidXMLshape标签使用详解(apk瘦身,减少内存好帮手)
AndroidXMLshape标签使⽤详解(apk瘦⾝,减少内存好帮⼿)⼩编推荐Android XML shape 标签使⽤详解 ⼀个android开发者肯定懂得使⽤ xml 定义⼀个 Drawable,⽐如定义⼀个 rect 或者 circle 作为⼀个 View 的背景。
但是,也肯定也有⼈在能使⽤ Drawable 的地⽅选择使⽤⼀张 png 图(或者是⼀张 .9 图)作为 View 的背景,因为后者把问题交给 UI 设计⼈员去了,省事。
当然,使⽤图⽚这种在项⽬中也很常见,如果不考虑 apk ⼤⼩,内存占⽤问题的话,是没有任何问题的。
如果要给 apk 瘦⾝,减少内存占⽤,那么本⽂ Drawable 的价值就提现出来了。
⾸先提出⼏个问题?备注:本⽂所说的 Drawable 都特指 shape 标签定义的 Drawableshape 标签定义的 Drawable 是哪种类型的 Drawable?使⽤ Drawable 有什么好处?什么情况下选择使⽤ Drawable,⽽不是使⽤⼀张图,反之呢?shape 标签能定义多少种类型的 Drawable?(这是本⽂的重点,⽅便我这种懒惰的程序员直接拷贝代码修改) 本⽂需要先了解shape标签的基本⽤法,关于Android shape标签的各个属性详解请移步:下⾯依次回答上⾯⼏个问题shape标签定义的Drawable是哪种类型的Drawable? shape 标签定义的 Drawable 类型对应 GradientDrawable 这⾥可能会认为是 ShapeDrawale ,我⼀开始也是这样认为的,因为我看到官⽅⽂档上说 ShapeDrawable 也是使⽤ shape 标签定义的,可是去看 GradientDrawable 的时候也是同样的解释,简直懵逼了,后⾯经过代码实际检验,shape 标签定义的 Drawable 能直接强制转换为 GradientDrawable,⽽不能转换为 ShapeDrawable,这个时候只能认为是 ShapeDrawable 的⽂档解释有点问题了,可能⽂档错了吧。
Android绘图技巧使用详解
Android绘图技巧使⽤详解本⽂实例为⼤家分享了Android绘图技巧使⽤的具体代码,供⼤家参考,具体内容如下XML绘图Bitmap<?xml version="1.0" encoding="utf-8"?><bitmap xmlns:android="/apk/res/android"android:src="@drawable/giao"/>Shape<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="/apk/res/android"android:shape="rectangle"><gradientandroid:startColor="#FF5DA2FF"android:endColor="#805FBBEF"android:angle="45"/><paddingandroid:bottom="7dp"android:top="7dp"android:left="7dp"android:right="7dp"/><corners android:radius="8dp"/></shape>Layer(实现Photoshop中类似图层的概念)<?xml version="1.0" encoding="utf-8"?><layer-list xmlns:android="/apk/res/android"><item android:drawable="@drawable/default_head"/><item android:drawable="@drawable/default_head"android:left="10dip"android:right="10dip"android:top="10dip"android:bottom="10dip"/><item android:drawable="@drawable/giao"android:left="200dp"android:right="200dp"android:top="200dp"android:bottom="200dp"/><!-- 图层效果--></layer-list>Selector(帮助开发者实现静态绘图中的时间反馈)<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="/apk/res/android"><item android:state_pressed="true"><shape android:shape="rectangle"><solid android:color="#33FD0000"/><corners android:radius="5dp"/><padding android:left="10dp"android:right="10dp"android:top="10dp"android:bottom="10dp"/></shape></item><item><shape android:shape="rectangle"><solid android:color="#ffffffff"/><corners android:radius="5dp"/><padding android:left="10dp"android:right="10dp"android:top="10dp"android:bottom="10dp"/></shape></item><!-- 点击反馈效果--></selector>Android绘图技巧Canvas(作为绘制图形的直接对象)Canvas.save();可以理解为保存画布,作⽤是将之前的所有已经绘制图像保存起来,让后续的操作就好像在⼀个新的图层上操作⼀样Canvas.restore();可以理解为Photoshop中的合并图层操作,作⽤是将save()之后绘制的所有的图像与save()之前的图像进⾏合并Canvas.translate();坐标系的平移Canvas.rotate();坐标系的旋转Layer图层特别注意的是 saveLayerAlpha()与restore()要同时使⽤,才能够在canvas 画出多个层次,就是花多少层就要有多少对两个函数!@Overrideprotected void onDraw(Canvas canvas) {//super.onDraw(canvas);drawLayer(canvas);//图层同样是基于栈的结构进⾏管理的@SuppressLint("DrawAllocation")Paint paint=new Paint();canvas.drawColor(Color.WHITE);paint.setColor(Color.BLUE);canvas.drawCircle(150,150,100,paint);canvas.saveLayerAlpha(0,0,400,400,127);//⼊栈(创建新图层)paint.setColor(Color.RED);canvas.drawCircle(200,200,100,paint);canvas.restore();//出栈}像素点分析bitmap.getPixels(pixels,offset,stride,x,y,width,height);参数含义如下:pixels:接受位图颜⾊值的数组offset:写⼊到pixels[]中的第⼀个索引值stride:pixels[]的⾏间距x:从位图中读取的第⼀个像素的x坐标值y:从位图中读取的第⼀个像素的y坐标值width:每⼀⾏中读取的像素宽度height:读取的⾏数画笔特效处理PorterDuffXfermodepublic class FilletView extends View {private Bitmap bitmap,out;private Paint paint;public FilletView(Context context) {super(context);inView();}public FilletView(Context context, @Nullable AttributeSet attrs) {super(context, attrs);inView();}public FilletView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);inView();}private void inView(){bitmap= BitmapFactory.decodeResource(getResources(), R.drawable.ask);out=Bitmap.createBitmap(bitmap.getWidth(),bitmap.getHeight(),Bitmap.Config.ARGB_8888); Canvas canvas=new Canvas(out);paint=new Paint();paint.setAntiAlias(true);canvas.drawRoundRect(0,0,bitmap.getWidth(),bitmap.getHeight(),80,80,paint);paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));canvas.drawBitmap(bitmap,0,0,paint);}@Overrideprotected void onDraw(Canvas canvas) {canvas.drawBitmap(out,0,0,null);}}ShaderBitmapShader:位图ShaderLinearGradient:线性ShaderRadialGradient:光束ShaderSweepGradient:梯度ShaderComposeShader:混合Shaderprivate void useBitmapShader(Canvas canvas){@SuppressLint("DrawAllocation")Bitmap bitmap= BitmapFactory.decodeResource(getResources(), R.drawable.default_head);@SuppressLint("DrawAllocation")BitmapShader shader=new BitmapShader(bitmap, Shader.TileMode.REPEAT,Shader.TileMode.REPEAT); @SuppressLint("DrawAllocation")Paint paint=new Paint();paint.setShader(shader);canvas.drawCircle(500,200,200,paint);}Shader.TileMode.REPEAT:重复——横向、纵向不断重复Shader.TileMode.CLAMP:拉伸——拉伸的图⽚最后的那个像素,不断重复Shader.TileMode.MIRROR:镜像——横向不断翻转重复,横向不断翻转重复PathEffect(各种笔触绘制⼀个路径)CornerPathEffect:拐⾓处变得圆滑DiscretePathEffect:线段上会产⽣许多杂点DashPathEffect:绘制虚线PathDashPathEffect:⽐DashPathEffect的功能更加强⼤,可以设置如⽅形点的虚线,圆形点的虚线。
Android使用XML的方式为背景添加渐变,描边,圆角的效果
使用XML的方式为背景添加渐变的效果首先,在res/Drawable 文件夹里面添加一个jbshape.xml文件,然后写入如下代码:shape 节点配置的是图形的形式,主要包括方形、圆形等,上边代码为方形,gradient节点主要配置起点颜色、终点颜色及中间点的颜色、坐标、渐变效果(0,90,180从左到右渐变,270从上到下渐变)默认从左到右padding 节点主要配置上下左右的间距corners 节点配置四周园脚的半径实现这个效果,需要定一个title.xml 内容如下:<?xml version=”1.0″ encoding=”UTF-8″?><LinearLayout xmlns:android=”/apk/res/android”android:orientation=”vertical”android:layout_width=”fill_parent”android:layout_height=”fill_parent”android:background=”@drawable/jbshape”android:paddingLeft=”0px”>在实现背景渐变的帖子里/blog/1238909有朋友建议看看shape的用法,确实很有帮助。
这里我偷懒转一篇比较详细的帖子,和大家一起进步~!Android中常常使用shape来定义控件的一些显示属性,今天看了一些shape的使用,对shape有了大体的了解,稍作总结:先看下面的代码:复制到剪贴板XML/HTML代码1.<shape>2.<!-- 实心-->3. <solidandroid:color="#ff9d77"/>4.<!-- 渐变-->5. <gradient6. android:startColor="#ff8c00"7. android:endColor="#FFFFFF"8. android:angle="270"/>9.<!-- 描边-->10. <stroke11. android:width="2dp"12. android:color="#dcdcdc"/>13.<!-- 圆角-->14. <corners15. android:radius="2dp"/>16. <padding17. android:left="10dp"18. android:top="10dp"19. android:right="10dp"20. android:bottom="10dp"/>21.</shape>solid:实心,就是填充的意思android:color指定填充的颜色gradient:渐变android:startColor和android:endColor分别为起始和结束颜色,ndroid:angle是渐变角度,必须为45的整数倍。
android shape用法
在Android中,Shape是一种用于创建自定义图形的资源。
通过使用Shape资源,您可以定义各种形状、颜色、大小等样式,并将其应用于应用程序中的视图组件。
要使用Shape资源,您需要遵循以下步骤:1.在res/drawable目录下创建一个新的XML文件,用于定义Shape的样式。
2.在XML文件中,使用<shape>元素来定义Shape的外观。
您可以在<shape>元素中设置以下属性:o android:shape:指定Shape的形状类型,例如矩形、圆形、椭圆形等。
o android:size:设置Shape的大小。
o android:padding:设置Shape的内边距。
o android:solid:设置Shape的填充颜色。
o android:stroke:设置Shape的描边样式。
o android:corners:设置Shape的四个角的半径。
例如,如果您要创建一个红色矩形,可以使用以下代码:xml复制代码<shapeandroid:shape="rectangle"android:size="100dp"android:padding="10dp"android:solid="#FF0000"android:stroke="#000000"android:corners="10dp"></shape>3.在需要应用Shape的视图组件中,使用相应的属性引用Shape资源。
例如,如果您要将Shape应用于一个Button的背景,可以使用以下代码:xml复制代码<Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@drawable/my_shape" />在上述代码中,@drawable/my_shape引用了您在res/drawable目录下创建的Shape资源文件。
androidshape实现阴影或模糊边效果
androidshape实现阴影或模糊边效果1.实现阴影或模糊边效果⽅式:2.通过shape来实现,具体是通过layer-list 多层叠放的⽅式实现的<?xml version="1.0" encoding="utf-8"?><layer-list xmlns:android="/apk/res/android"><!-- 边 --><item><shape android:shape="rectangle"><paddingandroid:bottom="2dp"android:left="2dp"android:right="2dp"android:top="2dp" /><solid android:color="#00CCCCCC" /><corners android:radius="8dp" /></shape></item><item><shape android:shape="rectangle"><paddingandroid:bottom="2dp"android:left="2dp"android:right="2dp"android:top="2dp" /><solid android:color="#10CCCCCC" /><corners android:radius="8dp" /></shape></item><item><shape android:shape="rectangle"><paddingandroid:bottom="2dp"android:left="2dp"android:right="2dp"android:top="2dp" /><solid android:color="#20CCCCCC" /><corners android:radius="8dp" /></shape></item><item><shape android:shape="rectangle"><paddingandroid:bottom="2dp"android:left="2dp"android:right="2dp"android:top="2dp" /><solid android:color="#30CCCCCC" /><corners android:radius="8dp" /></shape></item><item><shape android:shape="rectangle"><paddingandroid:bottom="2dp"android:left="2dp"android:right="2dp"android:top="2dp" /><solid android:color="#50CCCCCC" /><corners android:radius="8dp" /></shape></item><!-- 中⼼背景 --><item><shape android:shape="rectangle"android:useLevel="false"><!-- 实⼼ --><solid android:color="#ffffff" /><corners android:radius="10dp" /><padding android:left="10dp"android:right="10dp"android:top="10dp"android:bottom="10dp"/></shape></item></layer-list>使⽤:android:background="@drawable/layer_white_bg"顶部缩放了:android:top=2*5=10dp总结以上所述是⼩编给⼤家介绍的android shape实现阴影或模糊边效果,希望对⼤家有所帮助,如果⼤家有任何疑问请给我留⾔,⼩编会及时回复⼤家的。
Android开发教程:shape和selector的结合使用
Android开发教程:shape和selector的结合使⽤shape和selector是Android UI设计中经常⽤到的,⽐如我们要⾃定义⼀个圆⾓Button,点击Button有些效果的变化,就要⽤到shape和selector。
可以这样说,shape和selector在美化控件中的作⽤是⾄关重要的。
1.Shape简介作⽤:XML中定义的⼏何形状位置:res/drawable/⽂件的名称.xml使⽤的⽅法:Java代码中:R.drawable.⽂件的名称XML中:Android:background="@drawable/⽂件的名称"属性:<shape> Android:shape=["rectangle" | "oval" | "line" | "ring"]其中rectagle矩形,oval椭圆,line⽔平直线,ring环形<shape>中⼦节点的常⽤属性:<gradient> 渐变Android:startColor 起始颜⾊Android:endColor 结束颜⾊Android:angle 渐变⾓度,0从上到下,90表⽰从左到右,数值为45的整数倍默认为0;Android:type 渐变的样式 liner线性渐变 radial环形渐变 sweep<solid > 填充Android:color 填充的颜⾊<stroke > 描边Android:width 描边的宽度Android:color 描边的颜⾊Android:dashWidth 表⽰'-'横线的宽度Android:dashGap 表⽰'-'横线之间的距离<corners > 圆⾓Android:radius 圆⾓的半径值越⼤⾓越圆Android:topRightRadius 右上圆⾓半径Android:bottomLeftRadius 右下圆⾓⾓半径Android:topLeftRadius 左上圆⾓半径Android:bottomRightRadius 左下圆⾓半径2.Selector简介位置:res/drawable/⽂件的名称.xml使⽤的⽅法:Java代码中:R.drawable.⽂件的名称XML中:Android:background="@drawable/⽂件的名称"<?xml version="1.0" encoding="utf-8" ?><selector xmlns:Android="/apk/res/android"><!-- 默认时的背景图⽚--><item Android:drawable="@drawable/pic1" /><!-- 没有焦点时的背景图⽚ --><itemAndroid:state_window_focused="false"android:drawable="@drawable/pic_blue"/><!-- ⾮触摸模式下获得焦点并单击时的背景图⽚ --><itemAndroid:state_focused="true"android:state_pressed="true"android:drawable= "@drawable/pic_red"/><!-- 触摸模式下单击时的背景图⽚--><itemAndroid:state_focused="false"Android:state_pressed="true"Android:drawable="@drawable/pic_pink"/><!--选中时的图⽚背景--><itemAndroid:state_selected="true"android:drawable="@drawable/pic_orange"/><!--获得焦点时的图⽚背景--><itemAndroid:state_focused="true"Android:drawable="@drawable/pic_green"/></selector>第⼀个例⼦:圆⾓的Button第⼆个例⼦:shape+selector综合使⽤的例⼦漂亮的ListViewselector.xml<?xml version="1.0" encoding="utf-8"?><selector xmlns:Android="/apk/res/android"><item Android:state_selected="true"><shape><gradient Android:angle="270" android:endColor="#99BD4C"android:startColor="#A5D245" /><size Android:height="60dp" android:width="320dp" /><corners android:radius="8dp" /></shape></item><item Android:state_pressed="true"><shape><gradient Android:angle="270" android:endColor="#99BD4C"android:startColor="#A5D245"/><size Android:height="60dp" android:width="320dp" /><corners android:radius="8dp" /></shape></item><item><shape><gradient Android:angle="270" android:endColor="#A8C3B0"android:startColor="#C6CFCE" /><size Android:height="60dp" android:width="320dp" /><corners android:radius="8dp" /></shape></item></selector>list_item.xml<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:Android="/apk/res/android" android:orientation="horizontal"Android:layout_width="fill_parent"android:layout_height="wrap_content"Android:background="@drawable/selector"><ImageViewAndroid:id="@+id/img"Android:layout_width="wrap_content"android:layout_height="wrap_content"Android:layout_gravity="center_vertical"android:layout_marginLeft="20dp"/><TextViewAndroid:text="data"android:id="@+id/title"Android:layout_width="fill_parent"android:layout_height="wrap_content"Android:gravity="center_vertical"android:layout_marginLeft="20dp"Android:layout_marginTop="20dp"android:textSize="14sp"Android:textStyle="bold"android:textColor="@color/black"></TextView></LinearLayout>main.xml<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:Android="/apk/res/android" android:orientation="vertical"Android:layout_width="fill_parent"android:layout_height="wrap_content"Android:background="#253853"><ListViewAndroid:id="@+id/list"Android:layout_width="match_parent"android:layout_height="match_parent"Android:cacheColorHint="#00000000"android:divider="#2A4562"Android:dividerHeight="3px"android:listSelector="#264365"Android:drawSelectorOnTop="false"></ListView></LinearLayout>colors.xml<?xml version="1.0" encoding="utf-8"?><resources><color name="white">#FFFFFFFF</color><color name="transparency">#00000000</color><color name="title_bg">#1C86EE</color><color name="end_color">#A0cfef83</color><color name="black">#464646</color></resources>MainActivity.xmlpackage com.lingdududu.customlist;import java.util.ArrayList;import java.util.HashMap;import xb.customlist.R;import Android.R.array;import android.app.Activity;import Android.os.Bundle;import android.widget.ArrayAdapter;import Android.widget.ListView;import android.widget.SimpleAdapter;public class MainActivity extends Activity {ListView list;String data[] = new String[]{"China","UK","USA","Japan","German","Canada","ET","Narotu"};/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.main);list =(ListView) findViewById(R.id.list);SimpleAdapter adapter = new SimpleAdapter(this, getData(), yout.list_item,new String[]{"title","img"}, new int[]{R.id.title,R.id.img});list.setAdapter(adapter);}private ArrayList<HashMap<String, Object>> getData() {ArrayList<HashMap<String, Object>> dlist = new ArrayList<HashMap<String,Object>>(); for(int i =0;i<data.length;i++){HashMap<String, Object>map = new HashMap<String, Object>();map.put("title", data[i]);map.put("img", R.drawable.item_left2);dlist.add(map);}return dlist;}}。
android gridview的用法
android gridview的用法Android GridView的用法在Android应用程序开发中,GridView是一个非常有用的组件,用于显示类似表格的数据,并提供了许多自定义选项。
本文将介绍GridView的用法,并逐步讲解如何使用它来创建一个基本的网格布局。
1. 创建一个新的Android项目首先,打开Android Studio并创建一个新的Android项目。
选择一个项目名称和位置,然后选择适当的API级别和设备配置。
2. 准备布局文件在res/layout目录下创建一个新的布局文件,命名为activity_main.xml。
在此文件中,使用GridLayout作为根布局,并添加一些必要的属性。
xml<GridLayoutxmlns:android="android:id="@+id/gridLayout"android:layout_width="match_parent"android:layout_height="match_parent"android:columnCount="3"android:rowCount="3"></GridLayout>在此布局中,我们使用GridLayout作为根布局,并指定了columnCount 和rowCount属性来定义网格的行数和列数。
3. 创建GridView适配器创建一个新的Java类文件,命名为GridAdapter。
在该类中,继承BaseAdapter并实现必要的方法。
javapublic class GridAdapter extends BaseAdapter {private Context context;private List<Integer> data;public GridAdapter(Context context, List<Integer> data) {this.context = context;this.data = data;}@Overridepublic int getCount() {return data.size();}@Overridepublic Integer getItem(int position) {return data.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ImageView imageView;if (convertView == null) {imageView = new ImageView(context);imageView.setLayoutParams(newyoutParams(150, 150));imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);} else {imageView = (ImageView) convertView;}imageView.setImageResource(data.get(position));return imageView;}}在此适配器中,我们使用了一个ImageView作为网格中的单个项,通过设置布局参数和缩放模式来自定义它。
Android自定义水平或垂直虚线效果
Android⾃定义⽔平或垂直虚线效果项⽬中有时候会⽤到虚线,怎么办?drawable下创建⼀个shape类型的xml⽂件绘制,然后引⽤到view的background下?如果⽤到虚线的地⽅很多呢?创建多个,分别引⽤?横向的还好说,竖向的呢?垂直的虚线,普通的创建是显⽰不出来的,如果需要,就要进⾏旋转等的操作。
但是,还是那个问题,需要很多个怎么办?挨个创建?完全没必要,写个⾃定义,对外暴露设置虚线属性的⽅法就⾏。
源码如下:最后的说明很重要最后的说明很重要最后的说明很重要效果图:源码:ImaginaryLineViewpackage com.chen.demo;import android.content.Context;import android.graphics.Canvas;import android.graphics.DashPathEffect;import android.graphics.Paint;import android.graphics.Path;import android.graphics.PathEffect;import android.support.annotation.Nullable;import android.util.AttributeSet;import android.view.View;/*** ⾃定义垂直虚线view* chenjianqiang* 2017/6/14* <p>* 使⽤⽅法:* 在代码中findview之后,调⽤setLineAttribute⽅法,⾃定义虚线颜⾊及宽度*/public class ImaginaryLineView extends View {private Context ct;private Paint mPaint;private Path mPath;private PathEffect effects;private int width;private int height;private int defaultColor=0xffff0000;public ImaginaryLineView(Context context) {this(context, null);}public ImaginaryLineView(Context context, @Nullable AttributeSet attrs) {this(context, attrs, -1);}public ImaginaryLineView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);ct = context;init();}@Overrideprotected void onSizeChanged(int w, int h, int oldw, int oldh) {super.onSizeChanged(w, h, oldw, oldh);width = w;height = h;}private void init() {//初始化,并打开抗锯齿mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);mPaint.setStyle(Paint.Style.STROKE);mPaint.setColor(defaultColor);mPaint.setStrokeWidth(dip2px(ct, 1));mPath = new Path();//数组含义:⾥⾯最少要有2个值,值的个数必须是偶数个。
利用xml文件绘制圆角边框,三角形
利⽤xml⽂件绘制圆⾓边框,三⾓形1.绘制圆⾓边框<?xml version="1.0" encoding="UTF-8"?><shape xmlns:android="/apk/res/android"android:shape="rectangle"><strokeandroid:width="2dp"android:color="#000fff" /><!--设置边框线宽度和颜⾊!--><solid android:color="#000000" /><!--设置内容填充⾊!--><corners android:radius="10dp"/><!--设置⾓度!--></shape>效果图:使⽤⽅式:为控件设置android:background="xml⽂件名"也可利⽤android:topLeftRadius=""android:topRightRadius=""android:bottomLeftRadius=""android:bottomRightRadius=""为四个⾓分别设置⾓度。
2.绘制三⾓形Vector图⽚<vector xmlns:android="/apk/res/android"android:width="158dp"android:height="64dp"android:viewportWidth="24"android:viewportHeight="14"><pathandroid:fillColor="#99000000"android:pathData="M7,14l5,-5 5,5z" /></vector>效果图:这是AS⾃带的vector正三⾓,我更改了⼀下数值变为等腰且下移。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Android下基于XML的Graphics shape使用方法2011-05-30 10:47Android下基于XML的Graphics以前作图,一般有两种方式,首先是UI把图形设计好,我们直接贴,对于那些简单的图形,如矩形、扇形这样的图形,一般的系统的API会提供这样的接口,但是在Android下,有第三种画图方式,介于二者之间,结合二者的长处,如下的代码:Java 代码<item android:id="@android:id/secondaryProgress"><clip><shape><corners android:radius="5dip" /><gradientandroid:startColor="#0055ff88"android:centerColor="#0055ff00"android:centerY="0.75"android:endColor="#00320077"android:angle="270"/></shape></clip></item>这是一个Progress的style里面的代码,描述的是进度条的为达到的图形,原本以为这是一个图片,后来仔细的跟踪代码,发现居然是xml,像这种shape corners gradient等等这还是第一次碰到。
shape 表示是一个图形,corners表示是有半径为5像素的圆角,然后,gradient表示一个渐变。
这样作图简单明了,并且可以做出要求很好的图形,并且节省资源Java 代码<shapexmlns:android="/apk/res/andr oid" android:shape="rectangle"><gradient android:startColor="#FFFF0000" android:endColor="#80FF00FF"android:angle="270"/><padding android:left="50dp" android:top="20dp"android:right="7dp" android:bottom="7dp" /><corners android:radius="8dp" /></shape>gradient 产生颜色渐变android:angle从哪个角度开始变貌似只有90的整数倍可以android:shape="rectangle" 默认的也是长方形Java 代码<shapexmlns:android="/apk/res/andr oid" android:shape="oval"><solid android:color="#ff4100ff"/><stroke android:width="2dp" android:color="#ee31ff5e"android:dashWidth="3dp" android:dashGap="2dp" /> <padding android:left="7dp" android:top="7dp"android:right="7dp" android:bottom="7dp" /><corners android:radius="6dp" /></shape>#ff4100ff蓝色#ff4100ff绿色<solid android:color="#ff4100ff"/>实心的填充里面<stroke 描边采用那样的方式将外形轮廓线画出来android:dashWidth="3dp" android:dashGap="2dp" 默认值为0android:width="2dp" android:color="#FF00ff00"笔的粗细,android:dashWidth="5dp" android:dashGap="5dp" 实现- - -这样的效果,dashWidth指的是一条小横线的宽度dashGap指的是小横线与小横线的间距。
width="2dp" 不能太宽shape等特殊xml1.用shape 作为背景<shapexmlns:android="/apk/res/andr oid"><solid android:color="#f0600000"/><stroke android:width="3dp" color="#ffff8080"/><corners android:radius="3dp" /><padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" /></shape>一定要注意solid android:color="#f0600000" 是背景色要用8位最好不要完全透明不然没有效果啊这句话本来就不是背景色的意思2.类似多选的效果:(1)listView.setChoiceMode(ListView.CHOICE_MODE_MULTI PLE);listView.setItemsCanFocus(false);(2)define list itemCheckedTextViewxmlns:android="http://schemas.android.c om/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="?android:attr/listPreferredItem Height"android:textAppearance="?android:attr/textAppearance Large"android:gravity="center_vertical"android:paddingLeft="6dip"android:paddingRight="6dip"android:checkMark="?android:attr/listChoiceIndicatorM ultiple"android:background="@drawable/txt_view_bg"/> (3) define drawable txt_view_bg.xml <itemandroid:drawable="@drawable/selected"android:state_checked="true" /><itemandroid:drawable="@drawable/not_selected" />3.<LinearLayout android:layout_width="100dp" android:layout_height="wrap_content" /> LinearLayourll = newLinearLayout(this);parentView.addView(ll, new youtParams(100,LayoutParams.WRAP_CONTENT));4. 当设置TextViewsetEnabled(false)时背景颜色你如果用#ffff之类的话可能不会显示你最好使用android:textColor这个属性而不是使用color。
<TextView android:text="whatever text you want" android:layout_width="wrap_content" android:la yout_height="wrap_content" android:textColor="@color /example" />res/color/example.xml):<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="/apk/res/andr oid"> <item android:state_enabled="false"android:color="@color/disabled_color" /> <item android:color="@color/normal_color"/></selector>/intl/zh-CN/reference/andro id/content/res/ColorStateList.html5./?p=9<layer-listxmlns:android="/apk/res/andr oid"><item><shape><solid android:color="#FFF8F8F8" /></shape></item><item android:top="23px"><shape><solid android:color="#FFE7E7E8" /></shape></item></layer-list>You can simple combine several drawables into one using <layer-list> tag.note: Unfortenately you cannot resize drawables in layer-list. You can only move it.<layer-listxmlns:android="/apk/res/andr oid"> <itemandroid:drawable="@drawable/shape_below"/> <itemandroid:top="10px" android:right="10px"android:drawable="@drawable/shape_cover"/></layer-list>includeYou can put similar layout elements into separate XML and use <include> tag to use it.<RelativeLayoutxmlns:android="http://schemas.android.co m/apk/res/android"android:layout_width="fill_parent"android:layout_height="64dip"android:gravity="center_vertical"android:ignoreGravity="@+id/icon"><include layout="@layout/track_list_item_common" />;</RelativeLayout>track_list_item_common.xml<mergexmlns:android="/apk/res/andr oid"><ImageViewandroid:id="@+id/icon"android:layout_alignParentLeft="true"android:layout_centerVertical="true"android:layout_marginLeft="4dip"android:layout_width="60px"android:layout_height="60px"/>...</merge><?xml version="1.0" encoding="utf-8"?><!-- 长方形--><shapexmlns:android="/apk /res/android" android:shape="rectangle"><!-- 填充颜色--><!-- solid android:color="#00000000" /--><!-- 边框android:dashWidth="10dp"虚线的每一条长度android:dashGap="20dp" 虚线的间隔--><stroke android:width="2dip"android:color="#FFFFFFFF"android:dashWidth="10dp"android:dashGap="20dp"/><padding android:left="10dp"android:top="10dp" android:right="10dp"android:bottom="10dp" /><!-- 半径==>弧度--><corners android:radius="10dp" /><!-- 不能和solid同时使用填充渐变色--><gradient android:startColor="#FFFF0000" android:endColor="#80FF00FF"android:angle="270"/></shape>。