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>
分享到:
相关推荐
`Graphics_shape`是Android SDK提供的一种强大的工具,允许通过XML文件定义各种形状,如矩形、椭圆、线性渐变、径向渐变等,而无需依赖外部图像资源。这种方式既方便又节省内存,特别适合动态改变或自定义UI元素。 ...
Android Shape的使用及渐变色、分割线、边框、半透明阴影 Android Shape是一种在Android系统中使用的图形形状控件,可以用于创建各种形状的视图控件,例如矩形、椭圆、线条、圆环等。Shape控件可以使用xml文件来...
在Android开发中,为了实现高质量、可缩放的图形效果,开发者经常会选择使用SVG(Scalable Vector Graphics)矢量图。SVG是一种基于XML的图形格式,它允许开发者创建清晰、细腻的图形,无论是在小屏幕还是大屏幕上,...
7. **兼容性问题**: 考虑到Android版本的差异,可能需要使用`NinePatch`图或者`android.graphics.drawable.GradientDrawable`来实现圆角效果,以确保在不同版本的Android设备上表现一致。 8. **XML布局支持**: 除了...
- 在XML中定义动画序列,通过设置`android:oneshot`属性控制是否重复播放。 4. **Transition动画** - 自Android Lollipop(API Level 21)开始,Transition框架允许在Activity或Fragment间平滑过渡,例如布局变化...
4. **自定义动画**:如果你想要更个性化的水波纹效果,比如改变波纹颜色、速度、形状等,可以通过自定义`RippleDrawable`或者使用第三方库如`androidx.core.graphics.drawable.RippleDrawable`来实现。 5. **性能...
在这种情况下,你可能需要手动调整生成的XML代码,或者寻找其他替代方法,比如使用Bitmap Drawable或第三方库。 在实际项目中,使用转换后的VectorDrawable有以下优势: - **节省资源空间**:相比于位图,矢量图...
import android.graphics.drawable.Drawable; import androidx.appcompat.widget.AppCompatProgressBar; public class CustomCornerProgressBar extends AppCompatProgressBar { public CustomCornerProgressBar...
`<shape>`标签是XML drawable资源的一种,允许开发者定义不同类型的形状,如矩形、圆形、椭圆或线,并可以设置填充色、边框、渐变等属性。`Android-GradientDrawable调谐器`是一个实用工具,它帮助开发者更加直观地...
4. **使用`GradientDrawable`**:如果你的Vector Drawable是基于形状的,例如`<shape>`标签,你可以将其转换为`GradientDrawable`,然后直接设置颜色: ```java GradientDrawable gradientDrawable = ...
通过创建一个`Shape`对象,比如`<shape>`标签在XML布局文件中,我们可以设置其`android:shape`属性为`oval`来创建圆形,或者通过编程方式动态创建`RoundRectShape`来实现圆角矩形,进一步调整圆角大小来模拟圆弧效果...
在`res/drawable`目录下创建`square_progress_bar.xml`,在这个文件中,我们可以定义进度条的基本样式,例如宽度、颜色等。以下是一个简单的示例: ```xml <shape xmlns:android=...
创建一个Bitmap对象,然后创建一个BitmapShader,设置其模式为`Shader.TileMode.CLAMP`以防止图像拉伸,并将圆角半径传递给`android.graphics.Path.addRoundRect()`方法。最后,使用这个Shader来绘制Bitmap。 结合...
每个Drawable都被包含在一个`<item>`元素中,可以通过`android:drawable`或`android:src`属性指定对应的Bitmap、Shape或其他类型的Drawable。同时,`android:top`、`android:left`、`android:bottom`和`android:...
6. **SVG和VectorDrawable**:如果你的项目支持Android 5.0(Lollipop)及以上版本,可以考虑使用`VectorDrawable`或SVG(通过`android.graphics.drawable.VectorDrawable`和`android.graphics.drawable....
至于磨砂头像背景,可以使用android.graphics.drawable.RippleDrawable或者自定义Shader来实现。RippleDrawable可以提供触摸反馈的效果,但仅在API 21及以上版本可用。如果你需要兼容更低版本,可以使用Shader的...
- 使用Shape Drawable或Vector Drawable可以创建矢量图标,以适应更多尺寸和动画效果,同时减小程序资源大小。 总之,这个"Android开发按钮图标(png)"资源集合为Android开发者提供了丰富的设计元素,可以帮助他们...
水波纹效果的实现主要依赖于Android的`android.graphics.drawable.RippleDrawable`类,它是自Android 5.0(API Level 21)引入的一种新的可绘制对象,专为触摸反馈和聚焦状态设计。RippleDrawable不仅包含了水波纹...
在Android应用中,通常会使用XML布局文件定义UI结构。对于圆角图像,可以通过`android:background`属性设置一个带有圆角的`Shape Drawable`,例如`<shape>`元素内的`<corners>`标签可以定义圆角半径。 6. **代码...