`
zx273064010
  • 浏览: 15701 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Android下基于XML的Graphics shape使用方法

阅读更多
Android下基于XML的 Graphics

以前作图,一般有两种方式,首先是UI把图形设计好,我们直接贴,对于那些简单的图形,如矩形、扇形这样的图
形,一般的系统的API会提供这样的接口,但是在Android下,有第三种画图方式,介于二者之间,结合二者的长处,如
下的代码:
Java 代码
    <item android:id="@android:id/secondaryProgress">
        <clip>
         
            <shape>
                <corners android:radius="5dip" />
                <gradient
                        android: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 代码
<shape xmlns:android="http://schemas.android.com/apk/res/android" 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 代码
<shape xmlns:android="http://schemas.android.com/apk/res/android" 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" 默认值为0
android:width="2dp" android:color="#FF00ff00"笔的粗细,
android:dashWidth="5dp" android:dashGap="5dp" 实现- - -这样的效果,dashWidth指的是一条小横线的宽度
dashGap 指的是 小横线与小横线的间距。 width="2dp" 不能太宽


shape等特殊xml

1.用 shape 作为背景
<shape xmlns:android="http://schemas.android.com/apk/res/android">
   <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_MULTIPLE);

listView.setItemsCanFocus(false);
(2) define list item
CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical"
   android:layout_width="fill_parent"
   android:layout_height="?android:attr/listPreferredItemHeight"
   android:textAppearance="?android:attr/textAppearanceLarge"
   android:gravity="center_vertical"
   android:paddingLeft="6dip"
   android:paddingRight="6dip"
   android:checkMark="?android:attr/listChoiceIndicatorMultiple"
   android:background="@drawable/txt_view_bg"/>
(3) define drawable txt_view_bg.xml <item android:drawable="@drawable/selected" android:state_checked="true" /> <item android:drawable="@drawable/not_selected" />

3.
<LinearLayout    android:layout_width ="100dp"    android:layout_height="wrap_content" />
LinearLayour ll = new LinearLayout(this);parentView.addView(ll, new LinearLayout.LayoutParams(100, LayoutParams.WRAP_CONTENT));

4. 当设置   TextView setEnabled(false)时 背景颜色你如果用#ffff之类的话可能不会显示 你最好使用 android:textColor这个属性而不是使用color。
<TextView    android:text="whatever text you want"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:textColor="@color/example" />

res/color/example.xml):

<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android">    <item android:state_enabled="false" android:color="@color/disabled_color" />    <item android:color="@color/normal_color"/></selector>

http://developer.android.com/intl/zh-CN/reference/android/content/res/ColorStateList.html

5.
http://android.amberfog.com/?p=9
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
   <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-list xmlns:android="http://schemas.android.com/apk/res/android">   <item android:drawable="@drawable/shape_below"/>   <item android:top="10px" android:right="10px" android:drawable="@drawable/shape_cover"/></layer-list>


include
You can put similar layout elements into separate XML and use <include> tag to use it.
<RelativeLayout xmlns:android="http://schemas.android.com/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
<merge xmlns:android="http://schemas.android.com/apk/res/android">

    <ImageView android:id="@+id/icon"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:layout_marginLeft="4dip"
        android:layout_width="60px"
        android:layout_height="60px"/>
...
</merge>
分享到:
评论

相关推荐

    Android下基于XML的Graphics_shape使用方法.docx

    `Graphics_shape`是Android SDK提供的一种强大的工具,允许通过XML文件定义各种形状,如矩形、椭圆、线性渐变、径向渐变等,而无需依赖外部图像资源。这种方式既方便又节省内存,特别适合动态改变或自定义UI元素。 ...

    android shape的使用及渐变色、分割线、边框、半透明阴影

    Android Shape的使用及渐变色、分割线、边框、半透明阴影 Android Shape是一种在Android系统中使用的图形形状控件,可以用于创建各种形状的视图控件,例如矩形、椭圆、线条、圆环等。Shape控件可以使用xml文件来...

    android利用SVG矢量图打造酷炫动效

    在Android开发中,为了实现高质量、可缩放的图形效果,开发者经常会选择使用SVG(Scalable Vector Graphics)矢量图。SVG是一种基于XML的图形格式,它允许开发者创建清晰、细腻的图形,无论是在小屏幕还是大屏幕上,...

    Android 完美实现图片圆角和圆形

    7. **兼容性问题**: 考虑到Android版本的差异,可能需要使用`NinePatch`图或者`android.graphics.drawable.GradientDrawable`来实现圆角效果,以确保在不同版本的Android设备上表现一致。 8. **XML布局支持**: 除了...

    Android数百种动画效果源码

    - 在XML中定义动画序列,通过设置`android:oneshot`属性控制是否重复播放。 4. **Transition动画** - 自Android Lollipop(API Level 21)开始,Transition框架允许在Activity或Fragment间平滑过渡,例如布局变化...

    Android按钮水波纹

    4. **自定义动画**:如果你想要更个性化的水波纹效果,比如改变波纹颜色、速度、形状等,可以通过自定义`RippleDrawable`或者使用第三方库如`androidx.core.graphics.drawable.RippleDrawable`来实现。 5. **性能...

    svg转换成Android 可用的vector

    在这种情况下,你可能需要手动调整生成的XML代码,或者寻找其他替代方法,比如使用Bitmap Drawable或第三方库。 在实际项目中,使用转换后的VectorDrawable有以下优势: - **节省资源空间**:相比于位图,矢量图...

    Android自定义水平进度条圆角进度

    import android.graphics.drawable.Drawable; import androidx.appcompat.widget.AppCompatProgressBar; public class CustomCornerProgressBar extends AppCompatProgressBar { public CustomCornerProgressBar...

    Android-GradientDrawable调谐器可以帮助你更直观的理解<shape>中各种属性的作用。

    `&lt;shape&gt;`标签是XML drawable资源的一种,允许开发者定义不同类型的形状,如矩形、圆形、椭圆或线,并可以设置填充色、边框、渐变等属性。`Android-GradientDrawable调谐器`是一个实用工具,它帮助开发者更加直观地...

    Android-轻松从你的代码改变vectordrawables的颜色

    4. **使用`GradientDrawable`**:如果你的Vector Drawable是基于形状的,例如`&lt;shape&gt;`标签,你可以将其转换为`GradientDrawable`,然后直接设置颜色: ```java GradientDrawable gradientDrawable = ...

    Android 图片圆弧 和 圆形

    通过创建一个`Shape`对象,比如`&lt;shape&gt;`标签在XML布局文件中,我们可以设置其`android:shape`属性为`oval`来创建圆形,或者通过编程方式动态创建`RoundRectShape`来实现圆角矩形,进一步调整圆角大小来模拟圆弧效果...

    Android自定义方形进度条

    在`res/drawable`目录下创建`square_progress_bar.xml`,在这个文件中,我们可以定义进度条的基本样式,例如宽度、颜色等。以下是一个简单的示例: ```xml &lt;shape xmlns:android=...

    Android应用源码之Android创建抗锯齿透明背景圆角图像.zip

    创建一个Bitmap对象,然后创建一个BitmapShader,设置其模式为`Shader.TileMode.CLAMP`以防止图像拉伸,并将圆角半径传递给`android.graphics.Path.addRoundRect()`方法。最后,使用这个Shader来绘制Bitmap。 结合...

    Android LayerDrawable使用实例

    每个Drawable都被包含在一个`&lt;item&gt;`元素中,可以通过`android:drawable`或`android:src`属性指定对应的Bitmap、Shape或其他类型的Drawable。同时,`android:top`、`android:left`、`android:bottom`和`android:...

    Android之创建抗锯齿透明背景圆角图像_图片展示.zip

    6. **SVG和VectorDrawable**:如果你的项目支持Android 5.0(Lollipop)及以上版本,可以考虑使用`VectorDrawable`或SVG(通过`android.graphics.drawable.VectorDrawable`和`android.graphics.drawable....

    Android实现个人中心

    至于磨砂头像背景,可以使用android.graphics.drawable.RippleDrawable或者自定义Shader来实现。RippleDrawable可以提供触摸反馈的效果,但仅在API 21及以上版本可用。如果你需要兼容更低版本,可以使用Shader的...

    android开发按钮图标(png)

    - 使用Shape Drawable或Vector Drawable可以创建矢量图标,以适应更多尺寸和动画效果,同时减小程序资源大小。 总之,这个"Android开发按钮图标(png)"资源集合为Android开发者提供了丰富的设计元素,可以帮助他们...

    水波纹Ripple

    水波纹效果的实现主要依赖于Android的`android.graphics.drawable.RippleDrawable`类,它是自Android 5.0(API Level 21)引入的一种新的可绘制对象,专为触摸反馈和聚焦状态设计。RippleDrawable不仅包含了水波纹...

    Android创建抗锯齿透明背景圆角图像源码.zip

    在Android应用中,通常会使用XML布局文件定义UI结构。对于圆角图像,可以通过`android:background`属性设置一个带有圆角的`Shape Drawable`,例如`&lt;shape&gt;`元素内的`&lt;corners&gt;`标签可以定义圆角半径。 6. **代码...

Global site tag (gtag.js) - Google Analytics