安卓影片
一、逐幀影片
1.定義:把幾張圖片進行快速的播放就是逐幀影片
下面演示的demo是觸碰圖片進行影片的播放
2.添加幾張圖片
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-fffY5nI7-1623229374008)(C:\Users\23737\AppData\Roaming\Typora\typora-user-images\image-20210609154726838.png)]
3.在drawable檔案下面添加一個frame.xml檔案
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/one" android:duration="120"/>
<item android:drawable="@drawable/two" android:duration="120"/>
<item android:drawable="@drawable/three" android:duration="120"/>
<item android:drawable="@drawable/four" android:duration="120"/>
<item android:drawable="@drawable/five" android:duration="120"/>
</animation-list>
4.把主活動的xml修改了
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/Animation"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/frame"
tools:context=".AnimationActivity">
</RelativeLayout>
把剛才創建的frame.xml檔案當做背景匯入主活動
5.在java檔案下進行影片的展示
public class AnimationActivity extends AppCompatActivity {
private boolean flag = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_animation);
//獲得影片的Drawable資源
RelativeLayout relativeLayout = findViewById(R.id.Animation);
AnimationDrawable anim = (AnimationDrawable) relativeLayout.getBackground();
relativeLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (flag) {
//啟動影片
anim.start();
flag = false;
}else {
//停止影片
anim.stop();
flag = true;
}
}
});
}
}
首先呢需要設定一個標志位,標志圖片是否遍歷完成
接著就是找到控制元件,得到背景,設定點擊事件,啟動影片/結束影片
二、補間影片
補間影片:給影片設定初始值和結束值,設定一個變化時間,安卓系統會自動將影片補全,
分類:
- alpha:透明度
- rotate:旋轉
- scale:縮放
- translate:平移
1.首先先在res檔案下創一個anim檔案夾
2.在anim檔案下創一個xml檔案,命名為alpha
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha android:duration="2000"
android:fromAlpha="0" android:toAlpha="1" />
</set>
3.在主活動的xml檔案下進行修改
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".tweenAnimation">
<ImageView
android:layout_centerInParent="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/iv"
android:maxWidth="300dp"
android:maxHeight="300dp"
android:adjustViewBounds="true"
android:src="@drawable/ceshi"/>
</RelativeLayout>
4.在主活動的java檔案下修改代碼
public class tweenAnimation extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tween_animation);
ImageView imageView = findViewById(R.id.iv);
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//通過加載xml影片設定檔案來創建一個Animation物件
Animation animation = AnimationUtils.loadAnimation(tweenAnimation.this, R.anim.alpha);
//開啟影片
imageView.startAnimation(animation);
}
});
}
}
通過設定不同的操作型別來實作不同的效果,
例如平移、縮放、旋轉等
旋轉
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<rotate android:duration="2000"
android:fromDegrees="0"
android:toDegrees="360"
android:pivotX="50%"
android:pivotY="50%"/>
</set>
平移
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="0"
android:fromYDelta="0"
android:toXDelta="400"
android:toYDelta="400"
android:duration="2000"/>
</set>
縮放
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale android:duration = "2000"
android:fromXScale="1"
android:fromYScale="1"
android:toXScale="0.5"
android:toYScale="0.5"
android:pivotY="50%"
android:pivotX="50%"/>
</set>
然后在java檔案下修改就好了
public class tweenAnimation extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tween_animation);
ImageView imageView = findViewById(R.id.iv);
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//通過加載xml影片設定檔案來創建一個Animation物件
//透明度
// Animation animation = AnimationUtils.loadAnimation(tweenAnimation.this, R.anim.alpha);
// imageView.startAnimation(animation);
//縮放
// Animation animation = AnimationUtils.loadAnimation(tweenAnimation.this, R.anim.scale);
// imageView.startAnimation(animation);
//平移
// Animation animation = AnimationUtils.loadAnimation(tweenAnimation.this, R.anim.translate);
// imageView.startAnimation(animation);
//旋轉
Animation animation = AnimationUtils.loadAnimation(tweenAnimation.this, R.anim.rotate);
imageView.startAnimation(animation);
}
});
}
}
三、屬性影片
1.ValueAnimator
//屬性影片
ValueAnimator valueAnimator = ValueAnimator.ofFloat(0f,1f);
valueAnimator.setDuration(2000);
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
float value = (float) animation.getAnimatedValue();
}
});
valueAnimator.start();
2.ObjectAnimator
TextView textView = findViewById(R.id.text_animation);
//ObjectAnimator使得text的透明度由完全透明變成完全不透明
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(textView,"alpha",0f,1f);
objectAnimator.setDuration(4000);
objectAnimator.start();
3.監聽器
//監聽器
objectAnimator.addListener(new Animator.AnimatorListener() {
@Override
//影片開始的時候呼叫
public void onAnimationStart(Animator animation) {
}
@Override
//影片結束的時候呼叫
public void onAnimationEnd(Animator animation) {
}
@Override
//影片被取消的時候呼叫
public void onAnimationCancel(Animator animation) {
}
@Override
//影片重復執行的時候呼叫
public void onAnimationRepeat(Animator animation) {
}
});
全部代碼
public class tweenAnimation extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tween_animation);
//屬性影片
ValueAnimator valueAnimator = ValueAnimator.ofFloat(0f,1f);
valueAnimator.setDuration(2000);
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
float value = (float) animation.getAnimatedValue();
}
});
valueAnimator.start();
TextView textView = findViewById(R.id.text_animation);
//ObjectAnimator使得text的透明度由完全透明變成完全不透明
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(textView,"alpha",0f,1f);
objectAnimator.setDuration(4000);
objectAnimator.start();
//監聽器
objectAnimator.addListener(new Animator.AnimatorListener() {
@Override
//影片開始的時候呼叫
public void onAnimationStart(Animator animation) {
}
@Override
//影片結束的時候呼叫
public void onAnimationEnd(Animator animation) {
}
@Override
//影片被取消的時候呼叫
public void onAnimationCancel(Animator animation) {
}
@Override
//影片重復執行的時候呼叫
public void onAnimationRepeat(Animator animation) {
}
});
}
四、拓展:單位和尺寸
一、px和pt的區別
1.px
px: pixels(像素),不同設備的顯示效果相同
2.pt
pt: point,是一個標準的長度單位,1pt=1/72英寸,用于印刷業,非常簡單實用
二、dp和sp的作用
1.dp
dp(dip): device independent pixels(設備獨立像素),不同的設備會有不同的顯示效果,這個和設備硬體有關,一般我們為了支持WVGA、HVGA和QVGA推薦使用這個,不依賴像素,
2.sp
sp:scaled pixels(放大像素),主要用于字體顯示best for textsize
三、LayoutParams
LayoutParams相當于是一個Layout的資訊包,封裝了layout的位置、寬高等資訊.
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/286626.html
標籤:其他
