Android中的图片资源





一个图像资源是能在屏幕上画(绘制)的图形的一般概念,你能在API中恢复(getDrawable(int))或者在其他的XML资源中作为属性使用,比如 android:drawable 和 android:icon.下面是一些不同类型的图片:

Bitmap File 位图文件

一个位图图形文件 (.png .jpg .gif) .创建一个BitmapDrawable

Nine-Patch File 九宫格文件
一个具有可拉伸区域的PNG文件,允许图片基于内容改变大小,创建一个NinePatchDrawable.

Layer List  层列表
一个管理了一组其他图片的图片。它们按数组顺序绘制,所以最大索引的元素会被绘制在顶部。创建一个 LayerDrawable

State List状态列表

一个为不同的状态引用了不同的位图的XML文件 (例如当一个按钮按下时,使用不同的图片)。创建一个StateListDrawable

Level List
一个XML文件,定义了一个管理一组可选图片的图片,每个分配一个最大的数值,创建一个LevelListDrawable

Transition Drawable
一个XML文件,定义了一张图片能使两张图片之间交叉出现,创建一个TransitionDrawable.

Inset Drawable
一个XML文件,定义了一张图片以一定的距离嵌入另一张图片。当一个View需要一张比View实际边界小一点的背景图片时非常有用。

Clip Drawable  夹 图
一个XML文件,定义了一张图片基于当前的图片级别值夹住其他的图片。创建一个ClipDrawable

Scale Drawable 比例图片
一个XML文件,定义了一个图片,基于它当前的级别值改变其他图片的大小。创建一个ScaleDrawable

Shape Drawable 形状图片
一个XML文件,定义了一个几何(geometric)形状,包括颜色和斜率。创建一个ShapeDrawable

可以参考Animation Resource ,看如何创建一个 AnimationDrawable。

注意:一个在XML中的颜色资源也可以被当做drawable资源使用。例如,当创建一个 状态列表state list drawable时,你能使用 android:drawable 属性引用颜色资源。(android:drawable="@color/green").


===============================================================================================

Bitmap 位图
一种位图图片。Android支持三种格式的bitmap文件。.png(最好) .jpg (接受)   .gif(不鼓励)
你可以直接引用一个位图文件。用文件名作为资源ID,或者在XML中创建资源ID别名。
Bitmap文件可以在构建过程中使用aapt工具自动地优化进行无损压缩。例如,一个 真色 的PNG不会超过256种颜色,可以用调色板转化为一个8-bit的PNG图片.这回导致一个等质量的图片,但要求更少的内存.所以要知道在该目录中的二进制文件在构建期间可以改变.如果你计划使用 bit 流来读取一张图片以转化为一个bitmap ,请放置图片在 res/raw/ 文件夹,它们不会被优化。

Bitmap File
一个bitmap文件是一个.png .jpg .gif文件。当你将资源保存在 res/drawable/ 目录时,Android会为所有的文件创建一个Draeable资源。

 文件位置:
 res/drawable/filename.png (.png, .jpg, 或 .gif)

 编译的数据类型:
 BitmapDrawable.

 资源引用方式:
 java中: R.drawable.filename
 XML中:@[package:]drawable/filename

 例子:
在布局中使用:
<ImageView
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:src="@drawable/myimage" />
在代码中使用:
Resources res = getResources();
Drawable drawable = res.getDrawable(R.drawable.myimage);



XML Bitmap

一个XML bitmap 是一个在XML中定义的资源,它指向一个bitmap文件。其效果是原始位图文件的一个别名。者XML文件为该bitmap指定了额外的属性 ,比如dithering and tiling (犹豫不决的 瓦片 贴砖)。
注意:你可以用一个<bitmap>元素作为一个<item>的子元素。例如,当创建一个状态列表或层列表时,你在<item>元素中可以不包含android:drawable属性,嵌入一个<bitmap>,来定义图片。

 文件位置:
 res/drawable/filename.xml
 编译的数据类型:
 BitmapDrawable
 资源引用:
 java中: R.drawable.filename
 XML中:@[package:]drawable/filename

 语法:
<?xml version="1.0" encoding="utf-8"?>
<bitmap
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@[package:]drawable/drawable_resource"
    android:antialias=["true" | "false"]
    android:dither=["true" | "false"]
    android:filter=["true" | "false"]
    android:gravity=["top" | "bottom" | "left" | "right" | "center_vertical" |
                      "fill_vertical" | "center_horizontal" | "fill_horizontal" |
                      "center" | "fill" | "clip_vertical" | "clip_horizontal"]
    android:mipMap=["true" | "false"]
    android:tileMode=["disabled" | "clamp" | "repeat" | "mirror"] />

 元素:
 xmlns:android
 定义了Android的命名空间,必须是"http://schemas.android.com/apk/res/android". 仅当bitmap是根元素的时候才必要,否者当嵌入<item>使用时,不需要。
 android:src 图像资源,该属性必须有,引用到以一个图片资源
 android:antialias 别名是否可用。
 android:dither
 android:filter bitmap filter是否可用。filter当图片拖拽、拉伸使它的表面均匀,稳定
 android:gravity
 android:mipMap   指令提示是否可用 the mipmap hint
 android:tileMode 依附模式,当enable时,bitmap 可重复;但Gravity被忽略。
  其值必须是下列常量值之一:disabled  clamp  repeat  mirror

 例如:
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/icon"
    android:tileMode="repeat" />
 
Nine-Patch 九宫格图片
一个NinePatch是当在视图View内的内容超过正常的图片边界Android会按比例拉伸区域的一张PNG图片。典型的例子是分配一张图片作为某个属性(宽或高)设置为wrap-content的View背景,当视图随着内容变化时,九宫格图片也会按比例匹配视图的大小。作为一种常用的bitmap图片,你可以直接引用或从一个定义的XML文件中引用。
怎样创建具有拉伸区域的Nine-Patch文件,请看2D Graphics 文档
 文件位置:
 res/drawable/filename.9.png 文件名作为资源ID

 编译的数据类型:
 NinePatchDrawable.

 资源引用方式:
 java中: R.drawable.filename
 XML中:@[package:]drawable/filename

 例子:
<Button
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:background="@drawable/myninepatch" />

XML Nine-Patch
一个XML Nine-patch是在XML中定义的一种资源,该资源指向一张Nine-Patch图片,XML能指定Nine-Patch的dither属性。
 文件位置:
 res/drawable/filename.xml 文件名作为资源ID

 编译的数据类型:
 NinePatchDrawable.
  
 资源引用:
 java中: R.drawable.filename
 XML中: @[package:]drawable/filename

 语法:
<?xml version="1.0" encoding="utf-8"?>
<nine-patch
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@[package:]drawable/drawable_resource"
    android:dither=["true" | "false"] />

 xmlns:android    该属性必须有,且为"http://schemas.android.com/apk/res/android".
 android:src      该属性必须有
 例子:
<?xml version="1.0" encoding="utf-8"?>
<nine-patch xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/myninepatch"
    android:dither="false" />

Layer List
一个管理了一组其他图片的图片。它们按数组顺序绘制,所以最大索引的元素会被绘制在顶部。每张图片在一个 <layer-list>元素中用一个<item>项表示。

 文件位置:
 res/drawable/filename.xml

 编译的资源类型:
 LayerDrawable.

 资源引用:
 java中:R.drawable.filename
 XML中:@[package:]drawable/filename

 语法:
<?xml version="1.0" encoding="utf-8"?>
<layer-list
    xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:drawable="@[package:]drawable/drawable_resource"
        android:id="@[+][package:]id/resource_name"
        android:top="dimension"
        android:right="dimension"
        android:bottom="dimension"
        android:left="dimension" />
</layer-list>

 元素:
 <layer-list> 必须包含。它是根元素,包含一个或多个<item>元素。
 属性:
 xmlns:android 值必须是"http://schemas.android.com/apk/res/android".

 <item> 定义放置的图片资源,必定是<selector> 元素的一个孩子,接受<bitmap>类型的子元素。
 属性:
 android:drawable 必须包含。引用一个drawable资源
 android:id  一个新的资源ID ,你能用这个标识符,获取和修改这张图片,通过View.findViewById()或Activity.findViewById()
 android:top  Integer 顶部偏移的像素大小。
 android:right Integer 右边偏移的像素大小。
 android:bottom  Integer 底部偏移的像素大小。
 android:left  Integer  左边偏移的像素大小。

 默认所有的drawable项 会按比例缩放去适应包含视图View的大小。因此在不同位置在一个层列表中放置图片可以提升视图大小和图片比例的协调性。
 在列表中避免缩放项,可以在<item>元素内部使用<bitmap>元素,并定义gravity属性,就不能缩放了。
 例子:
 能根据View缩放的:
 <item android:drawable="@drawable/image" />
 不能缩放的:
<item>
  <bitmap android:src="@drawable/image"
          android:gravity="center" />
</item>

 例子:
 文件位置:
 res/drawable/layers.xml 

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
      <bitmap android:src="@drawable/android_red"
        android:gravity="center" />
    </item>
    <item android:top="10dp" android:left="10dp">
      <bitmap android:src="@drawable/android_green"
        android:gravity="center" />
    </item>
    <item android:top="20dp" android:left="20dp">
      <bitmap android:src="@drawable/android_blue"
        android:gravity="center" />
    </item>
</layer-list>

 应用到视图中的方式:

<ImageView
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:src="@drawable/layers" />

State List

一个为不同的状态引用了不同的位图的XML文件 (例如当一个按钮按下时,使用不同的图片)。你可以在XML文件中描述状态列表。<selector>中的每一项<item>代表一张图片。每一个<item>使用各种属性去描述哪一个状态应该使用哪一张图片。注意:非最佳匹配。
 文件位置:
 res/drawable/filename.xml
 编译的数据类型:
 StateListDrawable.
 资源引用:
 java中:R.drawable.filename
 XML中:@[package:]drawable/filename

 语法:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
    android:constantSize=["true" | "false"]
    android:dither=["true" | "false"]
    android:variablePadding=["true" | "false"] >
    <item
        android:drawable="@[package:]drawable/drawable_resource"
        android:state_pressed=["true" | "false"]
        android:state_focused=["true" | "false"]
        android:state_hovered=["true" | "false"]
        android:state_selected=["true" | "false"]
        android:state_checkable=["true" | "false"]
        android:state_checked=["true" | "false"]
        android:state_enabled=["true" | "false"]
        android:state_activated=["true" | "false"]
        android:state_window_focused=["true" | "false"] />
</selector>


 例子:
 文件位置:
 res/drawable/button.xml
 
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
          android:drawable="@drawable/button_pressed" /> <!-- pressed -->
    <item android:state_focused="true"
          android:drawable="@drawable/button_focused" /> <!-- focused -->
    <item android:state_hovered="true"
          android:drawable="@drawable/button_focused" /> <!-- hovered -->
    <item android:drawable="@drawable/button_normal" /> <!-- default -->
</selector>

 布局文件中使用:
<Button
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:background="@drawable/button" />


Level list:

一个Drawable ,管理了一些图片。每张图片分配了一个数值。通过用setLevel() 设置图片的级别值,从加载资源按android:maxLevel属性较大的,也可以等于该值。

 文件位置:
 res/drawable/filename.xml文件名作为资源ID
 编译资源类型:
 LevelListDrawable.

 
 资源引用:
 java中:R.drawable.filename
 XML中:@[package:]drawable/filename

 语法:
<?xml version="1.0" encoding="utf-8"?>
<level-list
    xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:drawable="@drawable/drawable_resource"
        android:maxLevel="integer"
        android:minLevel="integer" />
</level-list>

 例子:
<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:drawable="@drawable/status_off"
        android:maxLevel="0" />
    <item
        android:drawable="@drawable/status_on"
        android:maxLevel="1" />
</level-list>

一旦其应用到一个View,这级别值会被改变,通过 setLevel() or setImageLevel().


Transiton Drawable

一个XML文件,定义了一张图片能使两张图片之间交叉出现,创建一个TransitionDrawable.
 <transition>元素内的每个<item>项代表一张图片。注意,只有两张图片被支持。向前移动,调用startTransition(),向后移动调用reverseTransition()。

 文件位置:
 res/drawable/filename.xml 文件名会作为资源ID
 编译的资源类型:
  TransitionDrawable
 资源引用:
 java中:R.drawable.filename
 XML中:@[package:]drawable/filename
 
 语法:
<?xml version="1.0" encoding="utf-8"?>
<transition
xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:drawable="@[package:]drawable/drawable_resource"
        android:id="@[+][package:]id/resource_name"
        android:top="dimension"
        android:right="dimension"
        android:bottom="dimension"
        android:left="dimension" />
</transition>

<transition>是根元素,可以包含一个或多个<item>元素

<item>元素 接受<bitmap>作为子元素

 例子:
 文件位置:
 res/drawable/transition.xml

<?xml version="1.0" encoding="utf-8"?>
<transition xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/on" />
    <item android:drawable="@drawable/off" />
</transition>



应用:
<ImageButton
    android:id="@+id/button"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:src="@drawable/transition" />

下面的代码使从第1项到第2项执行500ms的变换
ImageButton button = (ImageButton) findViewById(R.id.button);
TransitionDrawable drawable = (TransitionDrawable) button.getDrawable();
drawable.startTransition(500);

Inset Drawable
一个XML文件,定义了一张图片以一定的距离嵌入另一张图片。当一个View需要一张比View实际边界小一点的背景图片时非常有用。

 文件位置:
 res/drawable/filename.xml
 编译资源的数据类型:
 InsetDrawable.
 资源引用:
 java中:R.drawable.filename
 XML中:@[package:]drawable/filename

 语法:
<?xml version="1.0" encoding="utf-8"?>
<inset
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/drawable_resource"
    android:insetTop="dimension"
    android:insetRight="dimension"
    android:insetBottom="dimension"
    android:insetLeft="dimension" /> 

<inset>必须是根元素。注意dimension值

 例子:
<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/background"
    android:insetTop="10dp"
    android:insetLeft="10dp" />

Clip Drawable
一个XML文件,定义了一张图片基于当前的图片级别值夹住其他的图片。创建一个ClipDrawable

 文件位置:
 res/drawable/filename.xml  文件名作为资源ID
 编译资源的数据类型:
 ClipDrawable.

 资源引用方式:
 java中:R.drawable.filename
 XML中:@[package:]drawable/filename

 语法:
<?xml version="1.0" encoding="utf-8"?>
<clip
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/drawable_resource"
    android:clipOrientation=["horizontal" | "vertical"]
    android:gravity=["top" | "bottom" | "left" | "right" | "center_vertical" |
                     "fill_vertical" | "center_horizontal" | "fill_horizontal" |
                     "center" | "fill" | "clip_vertical" | "clip_horizontal"] />


 例子:
 文件位置:
 res/drawable/clip.xml:

<?xml version="1.0" encoding="utf-8"?>
<clip xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/android"
    android:clipOrientation="horizontal"
    android:gravity="left" />


 应用:
<ImageView
    android:id="@+id/image"
    android:background="@drawable/clip"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content" />


代码中:
ImageView imageview = (ImageView) findViewById(R.id.image);
ClipDrawable drawable = (ClipDrawable) imageview.getDrawable();
drawable.setLevel(drawable.getLevel() + 1000);

嵌入值,level默认为 0 ,图片完全嵌入,因此图片不可见。当level值为10000时,图片没有嵌入,将完全可见。


Scale Drawable

 文件位置:
 res/drawable/filename.xml
 编译资源的数据类型:
 ScaleDrawable

 资源引用方式:
 java中:R.drawable.filename
 XML中:@[package:]drawable/filename

 语法:

<?xml version="1.0" encoding="utf-8"?>
<scale
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/drawable_resource"
    android:scaleGravity=["top" | "bottom" | "left" | "right" | "center_vertical" |
                          "fill_vertical" | "center_horizontal" | "fill_horizontal" |
                          "center" | "fill" | "clip_vertical" | "clip_horizontal"]
    android:scaleHeight="percentage"
    android:scaleWidth="percentage" />


 例子:
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/logo"
    android:scaleGravity="center_vertical|center_horizontal"
    android:scaleHeight="80%"
    android:scaleWidth="80%" />


Shape Drawable
在XML中定义的一般形状。

 文件位置:
 res/drawable/filename.xml

 编译的资源数据类型:
 GradientDrawable

 资源引用方式:
 java中: R.drawable.filename
 XML中:@[package:]drawable/filename

 语法:
<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape=["rectangle" | "oval" | "line" | "ring"] >
    <corners
        android:radius="integer"
        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"] />
    <padding
        android:left="integer"
        android:top="integer"
        android:right="integer"
        android:bottom="integer" />
    <size
        android:width="integer"
        android:height="integer" />
    <solid
        android:color="color" />
    <stroke
        android:width="integer"
        android:color="color"
        android:dashWidth="integer"
        android:dashGap="integer" />
</shape>


 元素:
 <shape> 根元素
 属性:
 xmlns:android 必须有,XML的命名空间。"http://schemas.android.com/apk/res/android".
 android:shape 定义形状类型。可用的值有:
  "rectangle"  长方形  默认值
  "oval"      椭圆形
  "line"    线    水平线,该形状要求<stroke>元素,定义线的宽度。
  "ring"   圈 环

 下面的属性仅当android:shape="ring"时起作用:
 android:innerRadius    内半径
 android:innerRadiusRatio  内半径比例   内环半径用环的宽的比例来表示  。例如, android:innerRadiusRatio="5", 那么内半径等于将圈的宽度除以5.ndroid:innerRadius使该值无效。默认值为9
 android:thickness 厚度 环的厚度。
 android:thicknessRatio   环的厚度用环的宽的比例来表示。例如,android:thicknessRatio="2", 那么环的厚度等于环的宽度除以2。android:innerRadius使该值无效。默认值为3.
 android:useLevel  如果为true ,它将作为一个LevelListDrawable使用。正常应该是false,否则你的行状将不会出现。
 
 <corners>
 为行状创建一个圆角,仅当行状是长方形rectangle时有用。
 属性:
 android:radius  所有角的半径   dimension 型值 它会使下面这些属性无效:
  android:topLeftRadius
  android:topRightRadius 
  android:bottomLeftRadius
  android:bottomRightRadius
 注意:每个角开始时必须提供一个大于1的角半径,否者没有角会被圆角化。如果你指定的角没有被圆角化,
  一个变通机制会使用android:radius 设置一个大于1的默认半径。但是 这也会使你设置的其他每个角都无效。提供0dp ,将不会有任何圆角.

 <gradient>
 为形状指定一个斜率(梯度)颜色. 
 属性:
 android:angle   方向(角度)   为gradient指定一个方向(角度),单位 度.0 是从左到右 ;90 从下到上 ;它必须是45度的倍数,默认值为0.
 android:centerX  gradient的中心相对于X轴的位置,值从(0-1.0)
 android:centerY  gradient的中心相对于Y轴的位置,值从(0-1.0)
 
 android:centerColor  Color 在开始和结束颜色之间的可选颜色,使用十六进制值或颜色资源.
 
 android:endColor Color 结束时的颜色.使用十六进制值或颜色资源
 android:gradientRadius   gradient的半径,仅当android:type="radial"时使用.
 android:startColor Color 开始时的颜色 使用十六进制值或颜色资源
 android:type gradient使用的类型 ,可用的值如下:
   "linear"   线性gradient,默认值
   "radial"   辐射状(星状)的gradient ,开始颜色start color 是中心颜色center color
   "sweep"    移动线gradient
 android:useLevel  如果为true,将作为LevelListDrawable使用.

 <padding>
 属性:
 android:left
 android:top
 android:right
 android:bottom
 


 <size>
 形状的大小
 属性:
 android:height
 android:width
 注意:默认,形状按容器View的大小比例缩放,是与这儿定义的尺寸相称的.当你在ImageView中使用该shape时,你应该严格设置android:scaleType 为"center".

 <solid>
 填充该形状的实心颜色.
 属性:
 android:color  Color  应用到该形状的颜色.十六进制或颜色资源.


 <stroke>
 该形状的一条斜线.
 属性:
 android:width  Dimension 线的厚度   一个Dimension值 或Dimension资源
 android:color  Color      线的颜色 一个十六进制值或颜色资源
 android:dashGap  Dimension      线破折号之间的距离   一个Dimension值 或Dimension资源.仅当android:dashWidth 设置时可用.
 android:dashWidth Dimension  每个破折号线的大小   一个Dimension值 或Dimension资源  .仅当android:dashGap 设置时可用.
 

 例子:
 文件位置:
 res/drawable/gradient_box.xml
 
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <gradient
        android:startColor="#FFFF0000"
        android:endColor="#80FF00FF"
        android:angle="45"/>
    <padding android:left="7dp"
        android:top="7dp"
        android:right="7dp"
        android:bottom="7dp" />
    <corners android:radius="8dp" />
</shape>


 在XML文件中使用:
<TextView
    android:background="@drawable/gradient_box"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content" />

 在代码中应用:
Resources res = getResources();
Drawable shape = res. getDrawable(R.drawable.gradient_box);

TextView tv = (TextView)findViewByID(R.id.textview);
tv.setBackground(shape);

本文为对android开发文档的翻译。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值