ANDROID中使用VIEWFLIPPER類實(shí)現(xiàn)屏幕切換(關(guān)于坐標(biāo)軸的問(wèn)題已補(bǔ)充更改)
屏幕切換指的是在同一個(gè)Activity內(nèi)屏幕間的切換,ViewFlipper繼承了Framelayout類,ViewAnimator類的作用是為FrameLayout里面的View切換提供動(dòng)畫(huà)效果。如下動(dòng)圖:
該類有如下幾個(gè)和動(dòng)畫(huà)相關(guān)的函數(shù):
- setInAnimation:設(shè)置View進(jìn)入屏幕時(shí)候使用的動(dòng)畫(huà),該函數(shù)有兩個(gè)版本,一個(gè)接受單個(gè)參數(shù),類型為android.view.animation.Animation;一個(gè)接受兩個(gè)參數(shù),類型為Context和int,分別為Context對(duì)象和定義Animation的resourceID。
- setOutAnimation: 設(shè)置View退出屏幕時(shí)候使用的動(dòng)畫(huà),參數(shù)setInAnimation函數(shù)一樣。
- showNext: 調(diào)用該函數(shù)來(lái)顯示FrameLayout里面的下一個(gè)View。
- showPrevious: 調(diào)用該函數(shù)來(lái)顯示FrameLayout里面的上一個(gè)View。
下面通過(guò)坐標(biāo)軸的形式為大家演示動(dòng)畫(huà)實(shí)現(xiàn)方式:
由上圖可知,以屏幕左下角為數(shù)學(xué)坐標(biāo)軸的原點(diǎn),屏幕下邊框?yàn)閄軸,左邊框?yàn)閅軸,當(dāng)前屏幕顯示為圖二,如果要看圖一,則需要圖一由左至右(相對(duì)屏幕而言)進(jìn)入屏幕,圖一X軸初始坐標(biāo)為-100%p,移動(dòng)到屏幕位置時(shí)圖一X軸變?yōu)?(因?yàn)楸敬窝菔緸闄M向滑動(dòng),所以不涉及Y軸);同理圖三要進(jìn)入屏幕,則需由右至左,X軸由100%p變?yōu)?.清楚了坐標(biāo)位置,我們要實(shí)現(xiàn)四種動(dòng)畫(huà)效果,就會(huì)很簡(jiǎn)單,下面代碼(需建立在res目錄下自建的anim文件夾下)演示四種動(dòng)畫(huà)效果:
in_leftright.xml——從左到右進(jìn)入屏幕:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="500"
android:fromXDelta="-100%p"
android:toXDelta="0"/>
</set>
out_leftright.xml——從左到右出去屏幕:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="500"
android:fromXDelta="0"
android:toXDelta="100%p"/>
</set>
in_rightleft.xml——從右到左進(jìn)入屏幕:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="500"
android:fromXDelta="100%p"
android:toXDelta="0"/>
</set>
out_rightleft.xml——從右到左出去屏幕:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="500"
android:fromXDelta="0"
android:toXDelta="-100%p"/>
</set>
動(dòng)畫(huà)效果建立完成,建立
Layout中view_layout.xml布局文件(本次直接將定義動(dòng)畫(huà)的三張圖片直接通過(guò)LinearLayOut布局到ViewFlipper中):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<ViewFlipper
android:id="@+id/vf"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@mipmap/sample_1" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@mipmap/sample_2" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@mipmap/sample_3" />
</LinearLayout>
</ViewFlipper>
</LinearLayout>
Activity中Java功能實(shí)現(xiàn)代碼:
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ViewFlipper;
/**
* Created by panchengjia on 2016/11/28.
*/
public class FlipperActivity extends AppCompatActivity implements View.OnTouchListener{
private ViewFlipper vf;
float startX;//聲明手指按下時(shí)X的坐標(biāo)
float endX;//聲明手指松開(kāi)后X的坐標(biāo)
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.viewflipper_layout);
vf= (ViewFlipper) findViewById(R.id.vf);
vf.setOnTouchListener(this);
}
@Override
public boolean onTouch(View v, MotionEvent event) {
//判斷捕捉到的動(dòng)作為按下,則設(shè)置按下點(diǎn)的X坐標(biāo)starX
if(event.getAction()==MotionEvent.ACTION_DOWN){
startX=event.getX();
//判斷捕捉到的動(dòng)作為抬起,則設(shè)置松開(kāi)點(diǎn)X坐標(biāo)endX
}else if(event.getAction()==MotionEvent.ACTION_UP){
endX=event.getX();
//由右到左滑動(dòng)屏幕,X值會(huì)減小,圖片由屏幕右側(cè)進(jìn)入屏幕
if(startX>endX){
//進(jìn)出動(dòng)畫(huà)成對(duì)
vf.setInAnimation(this,R.anim.in_rightleft);
vf.setOutAnimation(this,R.anim.out_rightleft);
vf.showNext();//顯示下個(gè)view
//由左到右滑動(dòng)屏幕,X值會(huì)增大,圖片由屏幕左側(cè)進(jìn)入屏幕
}else if(startX<endX){
vf.setInAnimation(this,R.anim.in_leftright);
vf.setOutAnimation(this,R.anim.out_leftright);
vf.showPrevious();//顯示上個(gè)view
}
}
return true;
}
}
在練習(xí)這里時(shí),動(dòng)畫(huà)的顯示效果方式困擾了我好久,這才想到了通過(guò)坐標(biāo)軸的形式體現(xiàn)動(dòng)畫(huà)實(shí)現(xiàn)原理,畫(huà)成的那一瞬間,整個(gè)人頓似醍醐灌頂,忍不住想要寫(xiě)成博文分享給大家,共勉!
后續(xù)更改補(bǔ)充:發(fā)文后,好友提醒在安卓開(kāi)發(fā)中Android屏幕坐標(biāo)系統(tǒng),不同于一般數(shù)學(xué)模型,原點(diǎn)應(yīng)該位于左上角且Y軸向下遞增,經(jīng)過(guò)查閱資料,確實(shí)如此,現(xiàn)更改坐標(biāo)軸如下: 
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android如何基于坐標(biāo)對(duì)View進(jìn)行模擬點(diǎn)擊事件詳解
- Android 坐標(biāo)系與視圖坐標(biāo)系圖解分析
- Android中GPS坐標(biāo)轉(zhuǎn)換為高德地圖坐標(biāo)詳解
- Android應(yīng)用 坐標(biāo)系詳細(xì)介紹
- Android開(kāi)發(fā)中MotionEvent坐標(biāo)獲取方法分析
- 深入淺析Android坐標(biāo)系統(tǒng)
- android獲得當(dāng)前view在屏幕中坐標(biāo)的方法
- Android中如何指定SnackBar在屏幕的位置及小問(wèn)題解決
- Android仿淘寶view滑動(dòng)至屏幕頂部會(huì)一直停留在頂部的位置
- Android獲取點(diǎn)擊屏幕的位置坐標(biāo)
相關(guān)文章
Android實(shí)現(xiàn)打開(kāi)手機(jī)淘寶并自動(dòng)識(shí)別淘寶口令彈出商品信息功能
最近項(xiàng)目經(jīng)理給我們安排一個(gè)活兒,基于Android開(kāi)發(fā)實(shí)現(xiàn)打開(kāi)手機(jī)淘寶,并自動(dòng)識(shí)別淘口令,彈出商品信息,今天小編就抽空給大家分享下這個(gè)需求是怎么實(shí)現(xiàn)的,需要的朋友參考下吧2017-11-11
Android中的Service相關(guān)全面總結(jié)
接下來(lái)將介紹Service的種類;Service與Thread的區(qū)別;Service的生命周期;startService 啟動(dòng)服務(wù);Local與Remote服務(wù)綁定等等,感興趣的朋友可以了解下2013-01-01
Android編程使用Fragment界面向下跳轉(zhuǎn)并一級(jí)級(jí)返回的實(shí)現(xiàn)方法
這篇文章主要介紹了Android編程使用Fragment界面向下跳轉(zhuǎn)并一級(jí)級(jí)返回的實(shí)現(xiàn)方法,較為詳細(xì)的分析了Fragment界面跳轉(zhuǎn)所涉及的相關(guān)知識(shí)點(diǎn)與實(shí)現(xiàn)技巧,并附帶了完整的實(shí)例代碼供讀者下載參考,需要的朋友可以參考下2015-10-10
eclipse中運(yùn)行monkeyrunner腳本之環(huán)境搭建(4)
這篇文章主要為大家詳細(xì)介紹了eclipse中運(yùn)行monkeyrunner腳本之環(huán)境搭建的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12
Android實(shí)現(xiàn)簡(jiǎn)單音樂(lè)播放控件
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)簡(jiǎn)單音樂(lè)播放控件,提供一個(gè)類似網(wǎng)易播放控件的默認(rèn)界面,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04
Android遞歸方式刪除某文件夾下的所有文件(.mp3文件等等)
以刪除為例,當(dāng)然,對(duì)于遍歷某文件夾下的所有文件均可用這個(gè)方法。如搜索.mp3文件等,具體實(shí)現(xiàn)如下,感興趣的朋友可以參考下哈2013-06-06
Android SQLite事務(wù)處理結(jié)合Listview列表顯示功能示例
這篇文章主要介紹了Android SQLite事務(wù)處理結(jié)合Listview列表顯示功能,較為詳細(xì)的分析了Android使用sqlite數(shù)據(jù)庫(kù)進(jìn)行事務(wù)操作并結(jié)合Listview進(jìn)行列表顯示的相關(guān)操作技巧,需要的朋友可以參考下2017-07-07
kotlin object關(guān)鍵字單例模式實(shí)現(xiàn)示例詳解
這篇文章主要為大家介紹了kotlin object關(guān)鍵字單例模式實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01

