Android Property Animation動畫

3.0以前,android支持兩種動畫模式,tween animation,frame animation,在android3.0中又引入了一個新的動畫系統:property animation,這三種動畫模式在SDK中被稱為property animation,view animation,drawable animation。 可通過NineOldAndroids項目在3.0之前的系統中使用Property Animation

1. View Animation(Tween Animation)

  View Animation(Tween Animation):補間動畫,給出兩個關鍵幀,通過一些算法將給定屬性值在給定的時間內在兩個關鍵幀間漸變。

  View animation只能應用于View對象,而且只支持一部分屬性,如支持縮放旋轉而不支持背景顏色的改變。

  而且對于View animation,它只是改變了View對象繪制的位置,而沒有改變View對象本身,比如,你有一個Button,坐標(100,100),Width:200,Height:50,而你有一個動畫使其變為Width:100,Height:100,你會發現動畫過程中觸發按鈕點擊的區域仍是(100,100)-(300,150)。

  View Animation就是一系列View形狀的變換,如大小的縮放,透明度的改變,位置的改變,動畫的定義既可以用代碼定義也可以用XML定義,當然,建議用XML定義。

  可以給一個View同時設置多個動畫,比如從透明至不透明的淡入效果,與從小到大的放大效果,這些動畫可以同時進行,也可以在一個完成之后開始另一個。

  用XML定義的動畫放在/res/anim/文件夾內,XML文件的根元素可以為<alpha>,<scale>,<translate>,<rotate>,interpolator元素或<set>(表示以上幾個動畫的集合,set可以嵌套)。默認情況下,所有動畫是同時進行的,可以通過startOffset屬性設置各個動畫的開始偏移(開始時間)來達到動畫順序播放的效果。

  可以通過設置interpolator屬性改變動畫漸變的方式,如AccelerateInterpolator,開始時慢,然后逐漸加快。默認為AccelerateDecelerateInterpolator。

  定義好動畫的XML文件后,可以通過類似下面的代碼對指定View應用動畫。

ImageView spaceshipImage = (ImageView)findViewById(R.id.spaceshipImage);
Animation hyperspaceJumpAnimation=AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
spaceshipImage.startAnimation(hyperspaceJumpAnimation);

2. Drawable Animation(Frame Animation)

  Drawable Animation(Frame Animation):幀動畫,就像GIF圖片,通過一系列Drawable依次顯示來模擬動畫的效果。在XML中的定義方式如下:

<animation-list xmlns:android="http://schemas.android.com/apk/res/android"android:oneshot="true"><item android:drawable="@drawable/rocket_thrust1" android:duration="200" /><item android:drawable="@drawable/rocket_thrust2" android:duration="200" /><item android:drawable="@drawable/rocket_thrust3" android:duration="200" />
</animation-list>

  必須以<animation-list>為根元素,以<item>表示要輪換顯示的圖片,duration屬性表示各項顯示的時間。XML文件要放在/res/drawable/目錄下。示例:

protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
imageView = (ImageView) findViewById(R.id.imageView1);
imageView.setBackgroundResource(R.drawable.drawable_anim);
anim = (AnimationDrawable) imageView.getBackground();
}

public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
anim.stop();
anim.start();
return true;
}
return super.onTouchEvent(event);
}

  我在實驗中遇到兩點問題:

  1. 要在代碼中調用Imageview的setBackgroundResource方法,如果直接在XML布局文件中設置其src屬性當觸發動畫時會FC。
  2. 在動畫start()之前要先stop(),不然在第一次動畫之后會停在最后一幀,這樣動畫就只會觸發一次。
  3. 最后一點是SDK中提到的,不要在onCreate中調用start,因為AnimationDrawable還沒有完全跟Window相關聯,如果想要界面顯示時就開始動畫的話,可以在onWindowFoucsChanged()中調用start()。

3. Property Animation

  屬性動畫,這個是在Android 3.0中才引進的,以前學WPF時里面的動畫機制好像就是這個,它更改的是對象的實際屬性,在View Animation(Tween Animation)中,其改變的是View的繪制效果,真正的View的屬性保持不變,比如無論你在對話中如何縮放Button的大小,Button的有效點擊區域還是沒有應用動畫時的區域,其位置與大小都不變。而在Property Animation中,改變的是對象的實際屬性,如Button的縮放,Button的位置與大小屬性值都改變了。而且Property Animation不止可以應用于View,還可以應用于任何對象。Property Animation只是表示一個值在一段時間內的改變,當值改變時要做什么事情完全是你自己決定的。

在Property Animation中,可以對動畫應用以下屬性:

  • Duration:動畫的持續時間
  • TimeInterpolation:屬性值的計算方式,如先快后慢
  • TypeEvaluator:根據屬性的開始、結束值與TimeInterpolation計算出的因子計算出當前時間的屬性值
  • Repeat Count and behavoir:重復次數與方式,如播放3次、5次、無限循環,可以此動畫一直重復,或播放完時再反向播放
  • Animation sets:動畫集合,即可以同時對一個對象應用幾個動畫,這些動畫可以同時播放也可以對不同動畫設置不同開始偏移
  • Frame refreash delay:多少時間刷新一次,即每隔多少時間計算一次屬性值,默認為10ms,最終刷新時間還受系統進程調度與硬件的影響

3.1 Property Animation的工作方式

  對于下圖的動畫,這個對象的X坐標在40ms內從0移動到40 pixel.按默認的10ms刷新一次,這個對象會移動4次,每次移動40/4=10pixel。

  也可以改變屬性值的改變方法,即設置不同的interpolation,在下圖中運動速度先逐漸增大再逐漸減小

  下圖顯示了與上述動畫相關的關鍵對象

ValueAnimator ?表示一個動畫,包含動畫的開始值,結束值,持續時間等屬性。

ValueAnimator封裝了一個TimeInterpolator,TimeInterpolator定義了屬性值在開始值與結束值之間的插值方法。

ValueAnimator還封裝了一個TypeAnimator,根據開始、結束值與TimeIniterpolator計算得到的值計算出屬性值。

ValueAnimator根據動畫已進行的時間跟動畫總時間(duration)的比計算出一個時間因子(0~1),然后根據TimeInterpolator計算出另一個因子,最后TypeAnimator通過這個因子計算出屬性值,如上例中10ms時:

首先計算出時間因子,即經過的時間百分比:t=10ms/40ms=0.25

經插值計算(inteplator)后的插值因子:大約為0.15,上述例子中用了AccelerateDecelerateInterpolator,計算公式為(input即為時間因子):

(Math.cos((input + 1) * Math.PI) / 2.0f) + 0.5f;  

最后根據TypeEvaluator計算出在10ms時的屬性值:0.15*(40-0)=6pixel。上例中TypeEvaluator為FloatEvaluator,計算方法為 :

public Float evaluate(float fraction, Number startValue, Number endValue) {float startFloat = startValue.floatValue();return startFloat + fraction * (endValue.floatValue() - startFloat);
}

參數分別為上一步的插值因子,開始值與結束值。

3.2 ValueAnimator

  ValueAnimator包含Property Animation動畫的所有核心功能,如動畫時間,開始、結束屬性值,相應時間屬性值計算方法等。應用Property Animation有兩個步聚:

  1. 計算屬性值
  2. 根據屬性值執行相應的動作,如改變對象的某一屬性。

  ValuAnimiator只完成了第一步工作,如果要完成第二步,需要實現ValueAnimator.onUpdateListener接口,這個接口只有一個函數onAnimationUpdate(),在這個函數中會傳入ValueAnimator對象做為參數,通過這個ValueAnimator對象的getAnimatedValue()函數可以得到當前的屬性值如:

ValueAnimator animation = ValueAnimator.ofFloat(0f, 1f);
animation.setDuration(1000);
animation.addUpdateListener(new AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
Log.i("update", ((Float) animation.getAnimatedValue()).toString());
}
});
animation.setInterpolator(new CycleInterpolator(3));
animation.start();

此示例中只是向Logcat輸出了一些信息,可以改為想做的工作。

Animator.AnimatorListener

onAnimationStart()onAnimationEnd()onAnimationRepeat()//當動畫被取消時調用,同時會調用onAnimationEnd().
onAnimationCancel()

ValueAnimator.AnimatorUpdateListener

onAnimationUpdate()  //通過監聽這個事件在屬性的值更新時執行相應的操作,對于ValueAnimator一般要監聽此事件執行相應的動作,不然Animation沒意義,在ObjectAnimator(繼承自ValueAnimator)中會自動更新屬性,如無必要不必監聽。在函數中會傳遞一個ValueAnimator參數,通過此參數的getAnimatedValue()取得當前動畫屬性值。

  可以繼承AnimatorListenerAdapter而不是實現AnimatorListener接口來簡化操作,這個類對AnimatorListener中的函數都定義了一個空函數體,這樣我們就只用定義想監聽的事件而不用實現每個函數卻只定義一空函數體。

ObjectAnimator oa=ObjectAnimator.ofFloat(tv, "alpha", 0f, 1f);
oa.setDuration(3000);
oa.addListener(new AnimatorListenerAdapter(){public void on AnimationEnd(Animator animation){Log.i("Animation","end");}
});
oa.start();

3.3 ObjectAnimator

  繼承自ValueAnimator,要指定一個對象及該對象的一個屬性,當屬性值計算完成時自動設置為該對象的相應屬性,即完成了Property Animation的全部兩步操作。實際應用中一般都會用ObjectAnimator來改變某一對象的某一屬性,但用ObjectAnimator有一定的限制,要想使用ObjectAnimator,應該滿足以下條件:

  • 對象應該有一個setter函數:set<PropertyName>(駝峰命名法)
  • 如上面的例子中,像ofFloat之類的工場方法,第一個參數為對象名,第二個為屬性名,后面的參數為可變參數,如果values…參數只設置了一個值的話,那么會假定為目的值,屬性值的變化范圍為當前值到目的值,為了獲得當前值,該對象要有相應屬性的getter方法:get<PropertyName>
  • 如果有getter方法,其應返回值類型應與相應的setter方法的參數類型一致。

  如果上述條件不滿足,則不能用ObjectAnimator,應用ValueAnimator代替。

tv=(TextView)findViewById(R.id.textview1);
btn=(Button)findViewById(R.id.button1);
btn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {ObjectAnimator oa=ObjectAnimator.ofFloat(tv, "alpha", 0f, 1f);oa.setDuration(3000);oa.start();}
});

  把一個TextView的透明度在3秒內從0變至1。

  根據應用動畫的對象或屬性的不同,可能需要在onAnimationUpdate函數中調用invalidate()函數刷新視圖。

3.4 通過AnimationSet應用多個動畫

  AnimationSet提供了一個把多個動畫組合成一個組合的機制,并可設置組中動畫的時序關系,如同時播放,順序播放等。

  以下例子同時應用5個動畫:

  1. 播放anim1;
  2. 同時播放anim2,anim3,anim4;
  3. 播放anim5。
AnimatorSet bouncer = new AnimatorSet();
bouncer.play(anim1).before(anim2);
bouncer.play(anim2).with(anim3);
bouncer.play(anim2).with(anim4)
bouncer.play(anim5).after(amin2);
animatorSet.start();

3.5 TypeEvalutors

  根據屬性的開始、結束值與TimeInterpolation計算出的因子計算出當前時間的屬性值,android提供了以下幾個evalutor:

  • IntEvaluator:屬性的值類型為int;
  • FloatEvaluator:屬性的值類型為float;
  • ArgbEvaluator:屬性的值類型為十六進制顏色值;
  • TypeEvaluator:一個接口,可以通過實現該接口自定義Evaluator。

  自定義TypeEvalutor很簡單,只需要實現一個方法,如FloatEvalutor的定義:

public class FloatEvaluator implements TypeEvaluator {public Object evaluate(float fraction, Object startValue, Object endValue) {float startFloat = ((Number) startValue).floatValue();return startFloat + fraction * (((Number) endValue).floatValue() - startFloat);}
}

  根據動畫執行的時間跟應用的Interplator,會計算出一個0~1之間的因子,即evalute函數中的fraction參數,通過上述FloatEvaluator應該很好看出其意思。

3.6 TimeInterplator

  Time interplator定義了屬性值變化的方式,如線性均勻改變,開始慢然后逐漸快等。在Property Animation中是TimeInterplator,在View Animation中是Interplator,這兩個是一樣的,在3.0之前只有Interplator,3.0之后實現代碼轉移至了TimeInterplator。Interplator繼承自TimeInterplator,內部沒有任何其他代碼。

  • AccelerateInterpolator      ? ? 加速,開始時慢中間加速
  • DecelerateInterpolator       ? 減速,開始時快然后減速
  • AccelerateDecelerateInterolator  ? 先加速后減速,開始結束時慢,中間加速
  • AnticipateInterpolator       ?反向 ,先向相反方向改變一段再加速播放
  • AnticipateOvershootInterpolator  ? 反向加回彈,先向相反方向改變,再加速播放,會超出目的值然后緩慢移動至目的值
  • BounceInterpolator        ?跳躍,快到目的值時值會跳躍,如目的值100,后面的值可能依次為85,77,70,80,90,100
  • CycleIinterpolator         循環,動畫循環一定次數,值的改變為一正弦函數:Math.sin(2 * mCycles * Math.PI * input)
  • LinearInterpolator         線性,線性均勻改變
  • OvershottInterpolator       ?回彈,最后超出目的值然后緩慢改變到目的值
  • TimeInterpolator         ? 一個接口,允許你自定義interpolator,以上幾個都是實現了這個接口

3.7 當Layout改變時應用動畫

  ViewGroup中的子元素可以通過setVisibility使其Visible、Invisible或Gone,當有子元素可見性改變時(VISIBLE、GONE),可以向其應用動畫,通過LayoutTransition類應用此類動畫:

transition.setAnimator(LayoutTransition.DISAPPEARING, customDisappearingAnim);

  通過setAnimator應用動畫,第一個參數表示應用的情境,可以以下4種類型:

  • APPEARING        當一個元素在其父元素中變為Visible時對這個元素應用動畫
  • CHANGE_APPEARING    當一個元素在其父元素中變為Visible時,因系統要重新布局有一些元素需要移動,對這些要移動的元素應用動畫
  • DISAPPEARING       當一個元素在其父元素中變為GONE時對其應用動畫
  • CHANGE_DISAPPEARING  ?當一個元素在其父元素中變為GONE時,因系統要重新布局有一些元素需要移動,這些要移動的元素應用動畫.

  第二個參數為一Animator。

mTransitioner.setStagger(LayoutTransition.CHANGE_APPEARING, 30);

  此函數設置動畫延遲時間,參數分別為類型與時間。

3.8 Keyframes

  keyFrame是一個 時間/值 對,通過它可以定義一個在特定時間的特定狀態,即關鍵幀,而且在兩個keyFrame之間可以定義不同的Interpolator,就好像多個動畫的拼接,第一個動畫的結束點是第二個動畫的開始點。KeyFrame是抽象類,要通過ofInt(),ofFloat(),ofObject()獲得適當的KeyFrame,然后通過PropertyValuesHolder.ofKeyframe獲得PropertyValuesHolder對象,如以下例子:

Keyframe kf0 = Keyframe.ofInt(0, 400);
Keyframe kf1 = Keyframe.ofInt(0.25f, 200);
Keyframe kf2 = Keyframe.ofInt(0.5f, 400);
Keyframe kf4 = Keyframe.ofInt(0.75f, 100);
Keyframe kf3 = Keyframe.ofInt(1f, 500);
PropertyValuesHolder pvhRotation = PropertyValuesHolder.ofKeyframe("width", kf0, kf1, kf2, kf4, kf3);
ObjectAnimator rotationAnim = ObjectAnimator.ofPropertyValuesHolder(btn2, pvhRotation);
rotationAnim.setDuration(2000);

  上述代碼的意思為:設置btn對象的width屬性值使其:

  • 開始時 Width=400
  • 動畫開始1/4時 Width=200
  • 動畫開始1/2時 Width=400
  • 動畫開始3/4時 Width=100
  • 動畫結束時 Width=500
第一個參數為時間百分比,第二個參數是在第一個參數的時間時的屬性值。
定義了一些Keyframe后,通過PropertyValuesHolder類的方法ofKeyframe一個PropertyValuesHolder對象,然后通過ObjectAnimator.ofPropertyValuesHolder獲得一個Animator對象。
用下面的代碼可以實現同樣的效果(上述代碼時間值是線性,變化均勻):
ObjectAnimator oa=ObjectAnimator.ofInt(btn2, "width", 400,200,400,100,500);
oa.setDuration(2000);
oa.start();

3.9 Animating Views

  在View Animation中,對View應用Animation并沒有改變View的屬性,動畫的實現是通過其Parent View實現的,在View被drawn時Parents View改變它的繪制參數,draw后再改變參數invalidate,這樣雖然View的大小或旋轉角度等改變了,但View的實際屬性沒變,所以有效區域還是應用動畫之前的區域,比如你把一按鈕放大兩倍,但還是放大這前的區域可以觸發點擊事件。為了改變這一點,在Android 3.0中給View增加了一些參數并對這些參數增加了相應的getter/setter函數(ObjectAnimator要用這些函數改變這些屬性):

  • translationX,translationY: View相對于原始位置的偏移量
  • rotation,rotationX,rotationY: 旋轉,rotation用于2D旋轉角度,3D中用到后兩個
  • scaleX,scaleY: 縮放比
  • x,y: View的最終坐標,是View的left,top位置加上translationX,translationY
  • alpha: 透明度
跟位置有關的參數有3個,以X坐標為例,可以通過getLeft(),getX(),getTranslateX()獲得,若有一Button btn2,布局時其坐標為(40,0):
//應用動畫之前
btn2.getLeft(); //40
btn2.getX(); //40
btn2.getTranslationX(); //0
//應用translationX動畫
ObjectAnimator oa=ObjectAnimator.ofFloat(btn2,"translationX", 200);
oa.setDuration(2000);
oa.start();
/*應用translationX動畫后
btn2.getLeft(); //40
btn2.getX(); //240
btn2.getTranslationX(); //200
*/
//應用X動畫,假設沒有應用之前的translationX動畫
ObjectAnimator oa=ObjectAnimator.ofFloat(btn2, "x", 200);
oa.setDuration(2000);
oa.start();
/*應用X動畫后
btn2.getLeft(); //40
btn2.getX(); //200
btn2.getTranslationX(); //160
*/
無論怎樣應用動畫,原來的布局時的位置通過getLeft()獲得,保持不變;
X是View最終的位置;
translationX為最終位置與布局時初始位置這差。
所以若就用translationX即為在原來基礎上移動多少,X為最終多少
getX()的值為getLeft()與getTranslationX()的和
對于X動畫,源代碼是這樣的:
case X:
info.mTranslationX = value - mView.mLeft;
break;

  Property Animation也可以在XML中定義

  • <set> - AnimatorSet
  • <animator> -?ValueAnimator
  • <objectAnimator> -?ObjectAnimator
XML文件應放大/res/animator/中,通過以下方式應用動畫:
AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(myContext, R.anim.property_animator);
set.setTarget(myObject);
set.start();

3.10 ViewPropertyAnimator

  如果需要對一個View的多個屬性進行動畫可以用ViewPropertyAnimator類,該類對多屬性動畫進行了優化,會合并一些invalidate()來減少刷新視圖,該類在3.1中引入。

  以下兩段代碼實現同樣的效果: 

PropertyValuesHolder pvhX = PropertyValuesHolder.ofFloat("x", 50f);
PropertyValuesHolder pvhY = PropertyValuesHolder.ofFloat("y", 100f);
ObjectAnimator.ofPropertyValuesHolder(myView, pvhX, pvyY).start();
myView.animate().x(50f).y(100f);

?

作者:AngelDevil
出處:www.cnblogs.com/angeldevil

?

轉載于:https://www.cnblogs.com/tiantianbyconan/p/3737942.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/258577.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/258577.shtml
英文地址,請注明出處:http://en.pswp.cn/news/258577.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

angular實現select的ng-options

ng實現簡單的select <div ng-controller"ngSelect"><select ng-model"vm.selectVal" ng-options"o.title for o in vm.optionsData"><option value"">請選擇</option></select> </div> var app …

Ubuntu14.04下Mongodb數據庫可視化工具安裝部署步驟(圖文詳解)(博主推薦)

不多說&#xff0c;直接上干貨&#xff01; 前期博客 Ubuntu14.04下Mongodb&#xff08;離線安裝方式|非apt-get&#xff09;安裝部署步驟&#xff08;圖文詳解&#xff09;&#xff08;博主推薦&#xff09; Ubuntu14.04下Mongodb官網安裝部署步驟&#xff08;圖文詳解&#x…

deeplab運行指南

以下僅僅為一個總結&#xff0c;參考了網上的眾多資料&#xff0c;僅備忘記。 主要鏈接 deeplab主頁&#xff1a;http://liangchiehchen.com/projects/DeepLab.html官方代碼&#xff1a;https://bitbucket.org/aquariusjay/deeplab-public-ver2python 版caffe實現&#xff1a…

tensorboard使用_colab打不開tensorboard的解決辦法

2020.4.1更新&#xff1a;colab現在自帶tensorboard的魔術方法了&#xff0c;用這個命令就能展示tensorboard%load_ext tensorboard %tensorboard --logdir ./log/train# 加載一次后&#xff0c;如果要重新加載&#xff0c;就需要使用reload方法 %reload_ext tensorboard %tens…

構造函數為什么不能是虛函數 ( 轉載自C/C++程序員之家)

從存儲空間角度&#xff0c;虛函數對應一個指向vtable虛函數表的指針&#xff0c;這大家都知道&#xff0c;可是這個指向vtable的指針其實是存儲在對象的內存空間的。問題出來了&#xff0c;如果構造函數是虛的&#xff0c;就需要通過 vtable來調用&#xff0c;可是對象還沒有實…

小程序“自定義關鍵詞”功能的常見問答

我們知道小程序可以通過線下掃碼、公眾號、好友分享、長按小程序碼、搜索小程序名稱來找到&#xff0c;現在又多了一個新方式——小程序后臺新增自定義關鍵詞功能&#xff1a;已發布小程序的開發者&#xff0c;可提交最多10個與小程序業務相關的關鍵詞&#xff0c;幫助你的小程…

語義分割深度學習方法集錦

轉載&#xff1a;https://github.com/handong1587/handong1587.github.io/edit/master/_posts/deep_learning/2015-10-09-segmentation.md Papers Deep Joint Task Learning for Generic Object Extraction intro: NIPS 2014homepage: http://vision.sysu.edu.cn/projects/d…

員工培訓與開發實訓心得體會_公司新員工培訓心得體會800字范文

點擊藍字關注我們培訓是一次能夠快速提升我們的機會&#xff0c;而每個新員工也是通過培訓盡快的融入公司的。因此&#xff0c;我們要更加重視培訓一些!下面是小編為大家整理的公司新員工培訓心得體會&#xff0c;希望對大家有幫助。公司新員工培訓心得體會800字為了讓我們新進…

Nginx ab壓力測試

20-ab壓力測試及nginx性能統計模塊 優化的啟發&#xff0c;打開的文件太多 Nginx 錯誤日志顯示&#xff0c;打開文件數太多 系統層面 more /proc/sys/net/core/somaxconn 單個Nginx 測試index.html 沒優化前 [root/home/www]#ab -c 4000 -n 100000 http://test.demo.com/inde…

Code First02---CodeFirst配置實體與數據庫映射的兩種方式

Code First有兩種配置數據庫映射的方式&#xff0c;一種是使用數據屬性DataAnnotation&#xff0c;另一種是Fluent API.這兩種方式分別是什么呢&#xff1f;下面進行一一解釋&#xff1a;DataAnnotation的配置方式需要你給定義實體和值對象的類和類中的屬性加上與數據庫映射相關…

sigmoid函數的數值穩定性

在深度學習中&#xff0c;我們常常選用sigmoid函數作為激活函數。sigmoid函數的具體形式如下&#xff1a; f(x)11e?xf(x)=\frac{1}{1+e^{-x}}曲線表示為&#xff1a; 再畫大一點&#xff0c;取x區間更大一些&#xff0c;則為&#xff1a; 顯然從圖像上看&#xff0c;sigmoid函…

查看CentOS版本方法

有以下命令可以查看&#xff1a; # lsb_release -a LSB Version: :core-3.1-ia32:core-3.1-noarch:graphics-3.1-ia32:graphics-3.1-noarchDistributor ID: CentOSDescription: CentOS release 5.4 (Final)Release: 5.4Codename: Final這個命令適用于所有的li…

windows遠程連接ubuntu 黑屏_Windows跟Windows遠程連接傳輸文件

關注奕奇科技&#xff0c;學習更多小妙招電腦小知識&#xff0c;值得收藏我們一般在使用windows遠程連接時需要傳輸文件該怎么辦&#xff1f;我們可以插入U盤導入導出&#xff0c;但這樣很是麻煩而且如果身邊暫時沒有U盤的情況就要通過社交工具傳播文件&#xff0c;大的文件也更…

思維導圖分析http之前端組成

思維導圖分析http前端組成全文總覽本文分為三個部分&#xff1a;前端組成&#xff0c;http協議&#xff0c;http服務器應用程序。http的應用按照我自己的理解分為前端應用以及后端應用&#xff0c;所以我分別寫了前端組成以及http服務器應用程序兩章&#xff0c;中間穿插了一章…

Linux命令工具基礎02 文件及目錄管理

文件及目錄管理 文件管理不外乎文件或目錄的創建、刪除、查詢、移動&#xff0c;有mkdir/rm/mv 文件查詢是重點&#xff0c;用find來進行查詢&#xff1b;find的參數豐富&#xff0c;也非常強大&#xff1b; 查看文件內容是個大的話題&#xff0c;文本的處理有太多的工具供我們…

caffe 關于Deconvolution的初始化注意事項

對于fcn&#xff0c;經常要使用到Deconvolution進行上采樣。對于caffe使用者&#xff0c;使用Deconvolution上采樣&#xff0c;其參數往往直接給定&#xff0c;不需要通過學習獲得。 給定參數的方式很有意思&#xff0c;可以通過兩種方式實現&#xff0c;但是這兩種方式并非完…

多目標進化優化_SDIM 學術講座|分解多目標優化與帕累托多任務學習

分解多目標優化與帕累托多任務學習2020年11月4日晚&#xff0c;香港城市大學電腦學系講座教授、博士生導師、IEEE Fellow張青富教授應我院王振坤教授的邀請&#xff0c;在線舉辦了一場主題為“分解多目標優化與帕累托多任務學習”的學術講座。此次講座采用線上和線下兩種渠道&a…

hibernate(nested transactions not supported)異常

org.hibernate.TransactionException: nested transactions not supported錯誤的解決方法&#xff01; 原因&#xff1a;事務沒有提交&#xff0c;事務提交后正常 Transaction tx session.beginTransaction(); tx.commit(); //缺少這句話轉載于:https://www.cnblogs.com/lmq-1…

Ubuntu使用Windows下的conio.h

把虛線框里面的內容粘貼進文檔文本里面 ---------------------------------------------------------------------------------------------------------- #include <termios.h>#include <stdio.h>static struct termios old, new;/* Initialize new terminal i/o …

安裝oracle-java,并覆蓋原先的OpenJDK

Centos默認安裝openJDK只安裝了java,沒有安裝javac.如果需要安裝javac&#xff0c;需要install the openjdk-8-jdk package。參考&#xff1a;http://openjdk.java.net/install/ 為了完整地安裝java&#xff0c;我們轉而選擇使用oracle-java&#xff0c;由于我們沒有root權限&a…