1. 程式人生 > >自定義控制元件三部曲之動畫篇(一)——alpha、scale、translate、rotate、set的xml屬性及用法

自定義控制元件三部曲之動畫篇(一)——alpha、scale、translate、rotate、set的xml屬性及用法

前言:這幾天做客戶回訪,感觸很大,使用者只要是留反饋資訊,總是一種恨鐵不成鋼的心態,想用你的app,卻是因為你的技術問題,讓他們不得不放棄,而你一個回訪電話卻讓他們盡釋前嫌,當最後把手機號留給他們以便隨時溝通的時候,總會發來一條條的鼓勵簡訊,讓我不自主的開始內疚。哎,多麼可愛的使用者,多麼無耐的現實。

相關文章:

一、概述

Android的animation由四種類型組成:alpha、scale、translate、rotate,對應android官方文件地址:《Animation Resources》

1、XML配置檔案中

alpha
漸變透明度動畫效果
scale
漸變尺寸伸縮動畫效果
translate
畫面轉換位置移動動畫效果
rotate
畫面轉移旋轉動畫效果


下面我們逐個講講每個標籤的屬性及用法。

2、動作檔案存放位置

動作定義檔案應該存放在res/anim資料夾下,訪問時採用R.anim.XXX.xml的方式,位置如圖:

二、scale標籤——調節尺寸

1、自有屬性

scale標籤是縮放動畫,可以實現動態調控制元件尺寸的效果,有下面幾個屬性:

  • android:fromXScale    起始的X方向上相對自身的縮放比例,浮點值,比如1.0代表自身無變化,0.5代表起始時縮小一倍,2.0代表放大一倍;
  • android:toXScale        結尾的X方向上相對自身的縮放比例,浮點值;
  • android:fromYScale    起始的Y方向上相對自身的縮放比例,浮點值,
  • android:toYScale        結尾的Y方向上相對自身的縮放比例,浮點值;
  • android:pivotX            縮放起點X軸座標,可以是數值、百分數、百分數p 三種樣式,比如 50、50%、50%p,當為數值時,表示在當前View的左上角,即原點處加上50px,做為起始縮放點;如果是50%,表示在當前控制元件的左上角加上自己寬度的50%做為起始點;如果是50%p,那麼就是表示在當前的左上角加上父控制元件寬度的50%做為起始點x軸座標。(具體意義,後面會舉例演示)
  • android:pivotY           縮放起點Y軸座標,取值及意義跟android:pivotX一樣。

下面看一個例項,當scale裡的屬性這樣設定時,效果會怎樣呢:

<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXScale="0.0"
    android:toXScale="1.4"
    android:fromYScale="0.0"
    android:toYScale="1.4"
    android:pivotX="50"
    android:pivotY="50"
    android:duration="700" />

(1)、pivotX取值數值時(50)

這個控制元件,寬度和高度都是從0放大到1.4倍,起始點座標在控制元件左上角(座標原點),向x軸正方向和y軸正方向都加上50畫素;

根據pivotX,pivotY的意義,控制元件的左上角即為控制元件的座標原點,這裡的起始點是在控制元件的原點的基礎上向X軸和Y軸各加上50px,做為起始點,如下圖中圖二所示

                               圖一                                                             圖二
    

(2)、pivotX取值百分數時(50%)
下面再看看當pivotX、pivotY取百分數的時候,起始點又在哪裡?

上面我們講了,pivotX的值,當取50%時,表示在原點座標的基礎上加上的自己寬度的50%,看看效果:

<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXScale="0.0"
    android:toXScale="1.4"
    android:fromYScale="0.0"
    android:toYScale="1.4"
    android:pivotX="50%"
    android:pivotY="50%"
    android:duration="700" />
縮放位置大小仍然從0-1.4,只改變pivotX和pivotY;起始點位置如下圖中圖二所示:

                               圖一                                                                 圖二

   
(3)、pivotX取值50%p時

前面說過,當取值在百分數後面加上一個字母p,就表示,取值的基數是父控制元件,即在原點的基礎上增加的值是父標籤的百分值。
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXScale="0.0"
    android:toXScale="1.4"
    android:fromYScale="0.0"
    android:toYScale="1.4"
    android:pivotX="50%p"
    android:pivotY="50%p"
    android:duration="700" />

效果圖,及起始點座標圖如下所示:

        

2、從Animation類繼承的屬性

Animation類是所有動畫(scale、alpha、translate、rotate)的基類,這裡以scale標籤為例,講解一下,Animation類所具有的屬性及意義。關於Animation類的官方文件位置為:《Animation》
  • android:duration        動畫持續時間,以毫秒為單位 
  • android:fillAfter          如果設定為true,控制元件動畫結束時,將保持動畫最後時的狀態
  • android:fillBefore       如果設定為true,控制元件動畫結束時,還原到開始動畫前的狀態
  • android:fillEnabled    與android:fillBefore 效果相同,都是在動畫結束時,將控制元件還原到初始化狀態
  • android:repeatCount 重複次數
  • android:repeatMode 重複型別,有reverse和restart兩個值,reverse表示倒序回放,restart表示重新放一遍,必須與repeatCount一起使用才能看到效果。因為這裡的意義是重複的型別,即回放時的動作。
  • android:interpolator  設定插值器,其實就是指定的動作效果,比如彈跳效果等,不在這小節中講解,後面會單獨列出一單講解。

對於android:duration,就不再講解了,就是動畫的持續時長,以毫秒為單位,下面看看android:fillAfter和android:fillBefore

(1)android:fillAfter:保持動畫結束的狀態

<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXScale="0.0"
    android:toXScale="1.4"
    android:fromYScale="0.0"
    android:toYScale="1.4"
    android:pivotX="50%"
    android:pivotY="50%"
    android:duration="700" 
    android:fillAfter="true"
    />

(2)android:fillBefore  還原初始化狀態

<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXScale="0.0"
    android:toXScale="1.4"
    android:fromYScale="0.0"
    android:toYScale="1.4"
    android:pivotX="50%"
    android:pivotY="50%"
    android:duration="700" 
    android:fillBefore="true"
    />
                android:fillBefore="true"                                 android:fillEnable="true"

   

上面順便列出了,當僅設定fillEanble為true時的效果,這兩個的標籤的效果完全相同。

(3)、android:repeatMode="restart /reverse"  設定回放型別

<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXScale="0.0"
    android:toXScale="1.4"
    android:fromYScale="0.0"
    android:toYScale="1.4"
    android:pivotX="50%"
    android:pivotY="50%"
    android:duration="700" 
    android:fillBefore="true"
    android:repeatCount="1"
    android:repeatMode="restart"
/>
        androidRepeatMode設為restart                       androidRepeatMode設為reverse
       

三、alpha標籤——調節透明度

1、自身屬性

  • android:fromAlpha   動畫開始的透明度,從0.0 --1.0 ,0.0表示全透明,1.0表示完全不透明
  • android:toAlpha       動畫結束時的透明度,也是從0.0 --1.0 ,0.0表示全透明,1.0表示完全不透明
使用示例:
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromAlpha="1.0"
    android:toAlpha="0.1"
    android:duration="3000"
    android:fillBefore="true">
</alpha>

2、從Animation類繼承的屬性

  • android:duration        動畫持續時間,以毫秒為單位 
  • android:fillAfter          如果設定為true,控制元件動畫結束時,將保持動畫最後時的狀態
  • android:fillBefore       如果設定為true,控制元件動畫結束時,還原到開始動畫前的狀態
  • android:fillEnabled    與android:fillBefore 效果相同,都是在動畫結束時,將控制元件還原到初始化狀態
  • android:repeatCount 重複次數
  • android:repeatMode 重複型別,有reverse和restart兩個值,reverse表示倒序回放,restart表示重新放一遍,必須與repeatCount一起使用才能看到效果。因為這裡的意義是重複的型別,即回放時的動作。
  • android:interpolator  設定插值器,其實就是指定的動作效果,比如彈跳效果等,不在這小節中講解,後面會單獨列出一單講解。
與scale標籤意義一樣,就不再綴述。

四、rotate標籤——旋轉

1、自身屬性

  • android:fromDegrees     開始旋轉的角度位置,正值代表順時針方向度數,負值程式碼逆時針方向度數
  • android:toDegrees         結束時旋轉到的角度位置,正值代表順時針方向度數,負值程式碼逆時針方向度數
  • android:pivotX               縮放起點X軸座標,可以是數值、百分數、百分數p 三種樣式,比如 50、50%、50%p,具體意義已在scale標籤中講述,這裡就不再重講
  • android:pivotY               縮放起點Y軸座標,可以是數值、百分數、百分數p 三種樣式,比如 50、50%、50%p
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="0"
    android:toDegrees="-650"
    android:pivotX="50%"
    android:pivotY="50%"
    android:duration="3000"
    android:fillAfter="true">
    
</rotate>
圍繞自身從0度逆時針旋轉650度                            圍繞自身從0度順時針旋轉650度

android:fromDegrees="0"                                       android:fromDegrees="0"

android:toDegrees="-650"                                      android:toDegrees="650"

     

2、從Animation類繼承的屬性

  • android:duration        動畫持續時間,以毫秒為單位 
  • android:fillAfter          如果設定為true,控制元件動畫結束時,將保持動畫最後時的狀態
  • android:fillBefore       如果設定為true,控制元件動畫結束時,還原到開始動畫前的狀態
  • android:fillEnabled    與android:fillBefore 效果相同,都是在動畫結束時,將控制元件還原到初始化狀態
  • android:repeatCount 重複次數
  • android:repeatMode 重複型別,有reverse和restart兩個值,reverse表示倒序回放,restart表示重新放一遍,必須與repeatCount一起使用才能看到效果。因為這裡的意義是重複的型別,即回放時的動作。
  • android:interpolator  設定插值器,其實就是指定的動作效果,比如彈跳效果等,不在這小節中講解,後面會單獨列出一單講解。
與scale標籤意義一樣,就不再綴述。

五、translate標籤 —— 平移

1、自身屬性

  • android:fromXDelta     起始點X軸座標,可以是數值、百分數、百分數p 三種樣式,比如 50、50%、50%p,具體意義已在scale標籤中講述,這裡就不再重講
  • android:fromYDelta    起始點Y軸從標,可以是數值、百分數、百分數p 三種樣式;
  • android:toXDelta         結束點X軸座標
  • android:toYDelta        結束點Y軸座標
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXDelta="0" 
    android:toXDelta="-80"
    android:fromYDelta="0"
    android:toYDelta="-80"
    android:duration="2000"
    android:fillBefore="true">
</translate>

2、從Animation類繼承的屬性

  • android:duration        動畫持續時間,以毫秒為單位 
  • android:fillAfter          如果設定為true,控制元件動畫結束時,將保持動畫最後時的狀態
  • android:fillBefore       如果設定為true,控制元件動畫結束時,還原到開始動畫前的狀態
  • android:fillEnabled    與android:fillBefore 效果相同,都是在動畫結束時,將控制元件還原到初始化狀態
  • android:repeatCount 重複次數
  • android:repeatMode 重複型別,有reverse和restart兩個值,reverse表示倒序回放,restart表示重新放一遍,必須與repeatCount一起使用才能看到效果。因為這裡的意義是重複的型別,即回放時的動作。
  • android:interpolator  設定插值器,其實就是指定的動作效果,比如彈跳效果等,不在這小節中講解,後面會單獨列出一單講解。
與scale標籤意義一樣,就不再綴述。

六、set標籤——定義動作合集

前面我們講解了各個標籤動畫的意義及用法,但他們都是獨立對控制元件起作用,假設我現在想上面的textView控制元件做一個動畫——從小到大,旋轉出場,而且透明度也要從0變成1,即下面的這個效果,該怎麼辦?


這就需要對指定的控制元件定義動作合集,Set標籤就可以將幾個不同的動作定義成一個組;

屬性:

set標籤自已是沒有屬性的,他的屬性都是從Animation繼承而來,但當它們用於Set標籤時,就會對Set標籤下的所有子控制元件都產生作用。

屬性有:(從Animation類繼承的屬性)

  • android:duration        動畫持續時間,以毫秒為單位 
  • android:fillAfter          如果設定為true,控制元件動畫結束時,將保持動畫最後時的狀態
  • android:fillBefore       如果設定為true,控制元件動畫結束時,還原到開始動畫前的狀態
  • android:fillEnabled    與android:fillBefore 效果相同,都是在動畫結束時,將控制元件還原到初始化狀態
  • android:repeatCount 重複次數
  • android:repeatMode 重複型別,有reverse和restart兩個值,reverse表示倒序回放,restart表示重新放一遍,必須與repeatCount一起使用才能看到效果。因為這裡的意義是重複的型別,即回放時的動作。
  • android:interpolator  設定插值器,其實就是指定的動作效果,比如彈跳效果等,不在這小節中講解,後面會單獨列出一單講解。
與scale標籤意義一樣,就不再綴述。

上面這個效果,所對應的XML程式碼為:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="3000"
    android:fillAfter="true">
    
  <alpha 
    android:fromAlpha="0.0"
    android:toAlpha="1.0"/>
  
  <scale
    android:fromXScale="0.0"
    android:toXScale="1.4"
    android:fromYScale="0.0"
    android:toYScale="1.4"
    android:pivotX="50%"
    android:pivotY="50%"/>
  
  <rotate
    android:fromDegrees="0"
    android:toDegrees="720"
    android:pivotX="50%"
    android:pivotY="50%"/>
       
</set>

七、例項——如何將動畫XML檔案應用於控制元件中

上面我僅僅是列出了每個標籤及其屬性的意義及應用之後的效果演示,但上面是如何將定義動畫的xml應用到textView控制元件中的卻遲遲沒說,這一小節,就以scale動畫為例,講述如何將定義好的scle動作新增到指定控制元件中。

先看最終效果圖:


1、新建工程、新建scale動畫檔案(scaleanim.xml)

新建一個工程,並且在res資料夾下,新建一個anim資料夾,然後再新建一個scaleanim.xml檔案,結構如圖所示:


scaleanim.xml的程式碼為:(從TextView中心點,從0放大到1.4倍,反覆一次,最後還原到初始化狀態)

<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXScale="0.0"
    android:toXScale="1.4"
    android:fromYScale="0.0"
    android:toYScale="1.4"
    android:pivotX="50%"
    android:pivotY="50%"
    android:duration="700" 
    android:fillBefore="true"
    android:repeatCount="1"
    android:repeatMode="restart"
/>

2、XML佈局檔案

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.harvic.animation_demo.MainActivity" >

    <Button android:id="@+id/btn_animation"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dip"
        android:text="scale animation"/>
    <TextView
        android:id="@+id/tv"
        android:layout_width="100dip"
        android:layout_height="200dip"
        android:background="#ff00ff" 
        android:text="@string/hello_world"
        android:layout_gravity="center_horizontal"/>

</LinearLayout>

3、JAVA程式碼

public class MainActivity extends Activity {

	Button scaleBtn	;
	Animation scaleAnimation;
	
	TextView tv;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		scaleAnimation = AnimationUtils.loadAnimation(this, R.anim.scaleanim);
		scaleBtn = (Button)findViewById(R.id.btn_animation);
		tv =(TextView)findViewById(R.id.tv);
		
		scaleBtn.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				tv.startAnimation(scaleAnimation);
			}
		});
		
	}

}
(1)通過scaleAnimation = AnimationUtils.loadAnimation(this, R.anim.scaleanim);從XML檔案中獲取動畫

(2)利用startAnimation將動畫傳遞給指定控制元件顯示。

至此,本文就結束了,下篇將講述有關插值器的相關屬性及意義。

下面就是原始碼下載了,原始碼中包含兩部分內容:

1、Harvic_animation_demo工程:是第七部分的例項原始碼;

2、tryAlpha_xml工程:是前六節動作程式碼的集合,包含了前六小節裡的所有程式碼及動畫定義。

相關推薦

定義控制元件三部曲動畫——alphascaletranslaterotateset的xml屬性用法

前言:這幾天做客戶回訪,感觸很大,使用者只要是留反饋資訊,總是一種恨鐵不成鋼的心態,想用你的app,卻是因為你的技術問題,讓他們不得不放棄,而你一個回訪電話卻讓他們盡釋前嫌,當最後把手機號留給他們以便隨時溝通的時候,總會發來一條條的鼓勵簡訊,讓我不自主的開始內疚。哎,多麼可愛

轉:定義控制元件三部曲動畫——alphascaletranslaterotateset的xml屬性用法

前言:這幾天做客戶回訪,感觸很大,使用者只要是留反饋資訊,總是一種恨鐵不成鋼的心態,想用你的app,卻是因為你的技術問題,讓他們不得不放棄,而你一個回訪電話卻讓他們盡釋前嫌,當最後把手機號留給他們以便隨時溝通的時候,總會發來一條條的鼓勵簡訊,讓我不自主的開始內疚。哎,多麼

定義控制元件三部曲動畫——Interpolator插值器

前言:雖然我不太能欣賞的了帕爾哈提的音樂,但我確實很欣賞他的人生態度,專心做自己,不想名利得失,有一天,你想要的東西都會來。其實我覺得,人生最可怕的就是停止不前,只要一直前行,總有一天會到達人生巔峰。相關文章:一、概述Interpolator屬性是Animation類的一個X

定義控制元件三部曲動畫(十)——layoutAnimation與gridLayoutAnimation

前言:人或許天生是懶惰的,明知道的不足,卻不努力彌補。 前幾篇給大家講述瞭如何針對某一個控制元件應用動畫,這篇將給大家講解如何給容器中的控制元件應用統一動畫。即在容器中控制元件出現時,不必為每個控制元件新增進入動畫,可以在容器中為其新增統一的進入和

定義控制元件三部曲繪圖——Path貝賽爾曲線和手勢軌跡水波紋效果

前言:好想義無反顧地追逐夢想從這篇開始,我將延續androidGraphics系列文章把圖片相關的知識給大家講完,這一篇先稍微進階一下,給大家把《android Graphics(二):路徑及文字》略去的quadTo(二階貝塞爾)函式,給大家補充一下。 本篇最終將以兩個例子給

定義控制元件三部曲繪圖十三——Canvas與圖層()

前言:猛然知道姥姥79了,我好怕,好想哭系列文章:一、如何獲得一個Canvas物件方法一:自定義view時, 重寫onDraw、dispatchDraw方法(1)、定義 我們先來看一下onDraw、dispatchDraw方法的定義protected void onDraw(

定義控制元件三部曲動畫(十)——聯合動畫的XML實現與使用示例

前言:不畏人生,或許才能方得始終;大膽拼,大膽闖是要有一定資本的,在能力不到的時候,就只有選擇忍氣吞聲! 上篇給大家講了有關AnimatorSet的程式碼實現方法,這篇我們就分別來看看如何利用xml來實現ValueAnimator、ObjectAn

定義控制元件三部曲繪圖(二十)——RadialGradient與水波紋按鈕效果

前言:每當感嘆自己的失敗時,那我就問你,如果讓你重新來一次,你會不會成功?如果會,那說明並沒有拼盡全力。 系列文章: 最近博主實在是太忙了,部落格更新實在是太慢了,真是有愧大家。 這篇將是Shader的最後一篇,下部分,我們將講述Canvas變

定義控制元件三部曲檢視——RecyclerView系列二ItemDecoration

從來不跌倒不算光彩,每次跌倒後能再站起來,才是最大的榮耀。 一、新增分割線 1.1 引入ItemDecoration 在上一篇中,我們講解了RecyclerView的基本使用方法,但有個問題:為什麼Item之間沒有分割線呢?其實,給RecyclerView新

定義控制元件三部曲檢視——RecyclerView系列之一簡單使用

絕望的時候不要那麼絕望,高興的時候不要那麼高興,是你慢慢會學會的。 ——董卿 轉了一年多,又回來繼續做Android。果然還是看到程式碼最讓我興奮……但有些事,沒經歷過,總歸還是遺憾的。在VIVO的遊戲中心,有一個特別炫酷的功能: 這個功能就是使

定義控制元件三部曲檢視——瀑布流容器WaterFallLayout實現

前言:只要在前行,夢想就不再遙遠 系列文章: 前面兩節講解了有關ViewGroup的onMeasure、onLayout的知識,這節我們深入性地探討一下,如何實現經常見到的瀑布流容器,本節將實現的效果圖如下: 從效果圖中可以看出這裡要完成的

定義控制元件學習繪製刻度盤

以前面試的時候面試官問過我會不會寫標尺工具,我沒做過呀,然後胡亂的說什麼畫布,ondraw繪製。。然後就沒有然後了--!,現在想想真的有點囧。所以今天我試了下自己畫刻度盤,不是很難,只有方法對了,輕輕鬆鬆。。大神勿噴,這是菜鳥的日常(高手退散退散。。巴拉巴拉能量**>_<**)

定義控制元件ViewonMeasure呼叫時機原始碼分析

先上測試程式碼:MainActivity.javaimport android.app.Activity; import android.os.Bundle; import android.util.Log; public class MainActivity extend

【Android定義控制元件仿網易星球浮動小球

仿網易星球浮動小球 讀唄開發過程中遇到新需求,類似於網易星球收集黑鑽的介面,考慮到可能也有人會使用,索性封裝成庫,後面好移植使用 先看看需要實現的效果: 需求分析: 資料集合可能是int、double、float等型別 小球位置隨機 沒有資料時

Android定義控制元件-Path貝賽爾曲線和手勢軌跡水波紋效果

從這篇開始,我將延續androidGraphics系列文章把圖片相關的知識給大家講完,這一篇先稍微進階一下,給大家把《android Graphics(二):路徑及文字》略去的quadTo(二階貝塞爾)函式,給大家補充一下。 本篇最終將以兩個例子給大家演示貝塞爾曲線

Android定義控制元件封裝定義屬性的實現

在開發中有時候我們需要去自定義一些組合控制元件,而在使用過程中,又想要自己的組合控制元件能有原生控制元件那樣可以在xml中使用屬性控制,那麼我們就需要去自定義一些屬性了 1:首先在values/attrs.xml中進行屬性的定義 <?xml version="1.

winCE 定義控制元件開發groupBox

2016-1-11 22:08:18 後面補充了一些對控制元件的修改 百度文庫有一篇非常適合學習的文件:c#自定義控制元件開發 wince裡用不了groupbox控制元件。所以只能自己寫。 思路就是簡單的組合控制元件:panel和label  後來發現直接用一個label就

Android定義控制元件熱身scrollTo和scrollBy詳解

View通過ScrollTo和ScrollBy 方法可以實現滑動。那麼兩者有什麼區別呢?我們先來看一下原始碼 ScrollTo原始碼: public void scrollTo(int x,

C#中定義控制元件隱藏基類成員屬性方法和事件的方法

       編寫自定義控制元件時,總是繼承C#中提供的Control類,而Control類是C#中所有窗體控制元件的基類,裡面定義了大量的屬性、方法和事件,而很多基類成員在自定義控制元件中可能不需要,因為編寫者會希望在自定義控制元件中隱藏這些成員,避免使用者呼叫這些成員。

定義的公共類連線資料庫1

//連結資料庫 public static SqlConnection lianjie() { SqlConnection con = new SqlConne