Android app引導頁(背景圖片切換加各個頁面動畫效果)
先看效果圖:
轉自:http://blog.csdn.net/lowprofile_coding/article/details/48037095
1.顯示三個頁面的Activity 用view pager去載入三個fragment實現,控制點點點的切換,監聽view pager的切換,控制fragment動畫的開始跟結束,重寫了view pager,實現了背景圖片的移動效果.
/** * 主Activity * @author ansen * @create time 2015-08-07 */ public class KaKaLauncherActivity extends FragmentActivity { private GuideViewPager vPager; private List<LauncherBaseFragment> list = new ArrayList<LauncherBaseFragment>(); private BaseFragmentAdapter adapter; private ImageView[] tips; private int currentSelect; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_luancher_main); //初始化點點點控制元件 ViewGroup group = (ViewGroup)findViewById(R.id.viewGroup); tips = new ImageView[3]; for (int i = 0; i < tips.length; i++) { ImageView imageView = new ImageView(this); imageView.setLayoutParams(new LayoutParams(10, 10)); if (i == 0) { imageView.setBackgroundResource(R.drawable.page_indicator_focused); } else { imageView.setBackgroundResource(R.drawable.page_indicator_unfocused); } tips[i]=imageView; LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(new ViewGroup.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT)); layoutParams.leftMargin = 20;//設定點點點view的左邊距 layoutParams.rightMargin = 20;//設定點點點view的右邊距 group.addView(imageView,layoutParams); } //獲取自定義viewpager 然後設定背景圖片 vPager = (GuideViewPager) findViewById(R.id.viewpager_launcher); vPager.setBackGroud(BitmapFactory.decodeResource(getResources(),R.drawable.bg_kaka_launcher)); /** * 初始化三個fragment 並且新增到list中 */ RewardLauncherFragment rewardFragment = new RewardLauncherFragment(); PrivateMessageLauncherFragment privateFragment = new PrivateMessageLauncherFragment(); StereoscopicLauncherFragment stereoscopicFragment = new StereoscopicLauncherFragment(); list.add(rewardFragment); list.add(privateFragment); list.add(stereoscopicFragment); adapter = new BaseFragmentAdapter(getSupportFragmentManager(),list); vPager.setAdapter(adapter); vPager.setOffscreenPageLimit(2); vPager.setCurrentItem(0); vPager.setOnPageChangeListener(changeListener); } /** * 監聽viewpager的移動 */ OnPageChangeListener changeListener=new OnPageChangeListener() { @Override public void onPageSelected(int index) { setImageBackground(index);//改變點點點的切換效果 LauncherBaseFragment fragment=list.get(index); list.get(currentSelect).stopAnimation();//停止前一個頁面的動畫 fragment.startAnimation();//開啟當前頁面的動畫 currentSelect=index; } @Override public void onPageScrolled(int arg0, float arg1, int arg2) {} @Override public void onPageScrollStateChanged(int arg0) {} }; /** * 改變點點點的切換效果 * @param selectItems */ private void setImageBackground(int selectItems) { for (int i = 0; i < tips.length; i++) { if (i == selectItems) { tips[i].setBackgroundResource(R.drawable.page_indicator_focused); } else { tips[i].setBackgroundResource(R.drawable.page_indicator_unfocused); } } } }
2.重寫viewpager 在dispatchDraw方法中控制顯示的背景圖片區域,
/** * 重寫ViewPager 主要做一個切換背景的功能 * @author ansen * @create time 2015-08-07 */ public class GuideViewPager extends ViewPager { private Bitmap bg; private Paint b = new Paint(1); public GuideViewPager(Context context) { super(context); } public GuideViewPager(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void dispatchDraw(Canvas canvas) { if (this.bg != null) { int width = this.bg.getWidth(); int height = this.bg.getHeight(); int count = getAdapter().getCount(); int x = getScrollX(); // 子View中背景圖片需要顯示的寬度,放大背景圖或縮小背景圖。 int n = height * getWidth() / getHeight(); /** * (width - n) / (count - 1)表示除去顯示第一個ViewPager頁面用去的背景寬度,剩餘的ViewPager需要顯示的背景圖片的寬度。 * getWidth()等於ViewPager一個頁面的寬度,即手機螢幕寬度。在該計算中可以理解為滑動一個ViewPager頁面需要滑動的畫素值。 * ((width - n) / (count - 1)) /getWidth()也就表示ViewPager滑動一個畫素時,背景圖片滑動的寬度。 * x * ((width - n) / (count - 1)) / getWidth()也就表示ViewPager滑動x個畫素時,背景圖片滑動的寬度。 * 背景圖片滑動的寬度的寬度可以理解為背景圖片滑動到達的位置。 */ int w = x * ((width - n) / (count - 1)) / getWidth(); canvas.drawBitmap(this.bg, new Rect(w, 0, n + w, height), new Rect( x, 0, x + getWidth(), getHeight()), this.b); } super.dispatchDraw(canvas); } public void setBackGroud(Bitmap paramBitmap) { this.bg = paramBitmap; this.b.setFilterBitmap(true); } }
3.主體佈局檔案 上面放一個自定義的viewpager 下面放一個顯示點點的RelativeLayout
<RelativeLayout 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" > <com.example.view.GuideViewPager android:id="@+id/viewpager_launcher" android:layout_width="match_parent" android:layout_height="match_parent" /> <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" > <LinearLayout android:id="@+id/viewGroup" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_marginBottom="30dp" android:gravity="center_horizontal" android:orientation="horizontal" /> </RelativeLayout> </RelativeLayout>
4.ViewPager介面卡
/**
* Viewpager介面卡
* @author apple
*
*/
public class BaseFragmentAdapter extends FragmentStatePagerAdapter {
private List<LauncherBaseFragment>list;
public BaseFragmentAdapter(FragmentManager fm, List<LauncherBaseFragment> list) {
super(fm);
this.list = list;
}
public BaseFragmentAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int arg0) {
return list.get(arg0);
}
@Override
public int getCount() {
return list.size();
}
}
5.Fragment抽象類 有兩個抽象方法,開啟動畫跟停止動畫 所有的Fragment都繼承這個類 Viewpager切換的時候可以更好的控制每個Fragment開啟動畫,結束動畫
- /**
- * Fragment抽象類
- * @author ansen
- *
- */
- publicabstractclass LauncherBaseFragment extends Fragment{
- publicabstractvoid startAnimation();
- publicabstractvoid stopAnimation();
- }
6.打賞頁Fragment 三個動畫效果 硬幣向下移動動畫+打賞圖片縮放動畫+改變打賞圖片透明度然後隱藏圖片
- /**
- * 打賞頁面
- * @author ansen
- * @create time 2015-08-07
- */
- publicclass RewardLauncherFragment extends LauncherBaseFragment{
- private ImageView ivReward;
- private ImageView ivGold;
- private Bitmap goldBitmap;
- privateboolean started;//是否開啟動畫(ViewPage滑動時候給這個變數賦值)
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
- View rooView=inflater.inflate(R.layout.fragment_reward_launcher, null);
- ivGold=(ImageView) rooView.findViewById(R.id.iv_gold);
- ivReward=(ImageView) rooView.findViewById(R.id.iv_reward);
- //獲取硬幣的高度
- goldBitmap=BitmapFactory.decodeResource(getActivity().getResources(),R.drawable.icon_gold);
- startAnimation();
- return rooView;
- }
- publicvoid startAnimation(){
- started=true;
- //向下移動動畫 硬幣的高度*2+80
- TranslateAnimation translateAnimation=new TranslateAnimation(0,0,0,goldBitmap.getHeight()*2+80);
- translateAnimation.setDuration(500);
- translateAnimation.setFillAfter(true);
- ivGold.startAnimation(translateAnimation);
- translateAnimation.setAnimationListener(new AnimationListener() {
- @Override
- publicvoid onAnimationStart(Animation animation) {}
- @Override
- publicvoid onAnimationEnd(Animation animation){
- if(started){
- ivReward.setVisibility(View.VISIBLE);
- //硬幣移動動畫結束開啟縮放動畫
- Animation anim=AnimationUtils.loadAnimation(getActivity(),R.anim.reward_launcher);
- ivReward.startAnimation(anim);
- anim.setAnimationListener(new AnimationListener(){
- @Override
- publicvoid onAnimationStart(Animation animation) {}
- @Override
- publicvoid onAnimationRepeat(Animation animation) {}
- @Override
- publicvoid onAnimationEnd(Animation animation) {
- //縮放動畫結束 開啟改變透明度動畫
- AlphaAnimation alphaAnimation=new AlphaAnimation(1,0);
- alphaAnimation.setDuration(1000);
- ivReward.startAnimation(alphaAnimation);
- alphaAnimation.setAnimationListener(new AnimationListener() {
- @Override
- publicvoid onAnimationStart(Animation animation) {}
- @Override
- publicvoid onAnimationRepeat(Animation animation) {}
- @Override
- publicvoid onAnimationEnd(Animation animation) {
- //透明度動畫結束隱藏圖片
- ivReward.setVisibility(View.GONE);
- }
- });
- }
- });
- }
- }
- @Override
- publicvoid onAnimationRepeat(Animation animation) {}
- });
- }
- @Override
- publicvoid stopAnimation(){
- started=false;//結束動畫時標示符設定為false
- ivGold.clearAnimation();//清空view上的動畫
- }
- }
7.私信頁面 四個動畫效果 並且四個動畫都相同,其實只要我們實現了一個,其他的基本都很容易了. 依次實現四個圖片的放大然後還原
- /**
- * 私信
- * @author ansen
- */
- publicclass PrivateMessageLauncherFragment extends LauncherBaseFragment{
- private ImageView ivLikeVideo,ivThinkReward,ivThisWeek,ivWatchMovie;
- private Animation likeAnimation,thinkAnimation,watchAnimation,thisWeekAnimation;
- privateboolean started;//是否開啟動畫
-
相關推薦
Android app引導頁(背景圖片切換加各個頁面動畫效果)
先看效果圖: 轉自:http://blog.csdn.net/lowprofile_coding/article/details/48037095 1.顯示三個頁面的Activity 用view pager去載入三個fragment實現,控制點點點的切換
Android之app引導頁(背景圖片切換加各個頁面動畫效果)
轉載:http://blog.csdn.net/lowprofile_coding/article/details/48037095 先看效果圖: 1.顯示三個頁面的Activity 用view pager去載入三個fragment實現,控制點點點的切換,監聽view
app引導頁(背景圖片切換加各個頁面動畫效果)
轉載請註明出處:http://blog.csdn.net/lowprofile_coding/article/details/48037095前言:不知不覺中又加班到了10點半,整個啟動頁面做了一天多的時間,一共有三個頁面,每個頁面都有動畫效果,動畫效果除錯起來麻煩,既要跟i
關於android app啟動頁白屏黑屏和華為手機啟動頁圖片跳躍閃屏的問題
1、產生原因 關於點選app圖標出現白屏和黑屏的產生原因,首先要說的就是app的啟動模式:冷啟動(cold start),暖啟動(warm start),熱啟動(lukewarm start)。冷啟動:是指程序從無到有的過程。因為要進行頁面初始化,所以相對
Android studio2.0在app中設定背景圖片及新增圖片資源
我還處於摸索階段,也是在慢慢倒騰,持續更新,希望能幫助到有需要的人 首先將需要的圖片轉成png格式(png格式的圖片顏色過渡平滑且支援透明度),牆紙或啟動畫面的圖片資源儲存為jpg格式。 將圖片儲存到相應的工程之下,不要放錯了。 某工程/app/src/m
Android使用每日必應美圖作為啟動頁背景圖片
微軟必應每天都會更新一張很美的圖片作為網站的背景,拿來做啟動頁背景也是美美噠。 1.準備工作 網路請求:OKHttp 圖片載入:Picasso 每日必應圖片資料的獲取,訪問這個網址就可以獲取到每日的
Android Studio App設定Activity背景圖片
愛看美女網(我搞的網站,幫忙點開一下吧) 1.首先PC上要有一張png格式的圖片,複製它,注意圖片名字(只能含小寫字母a~z和數字0~9,".png“要小寫),貼上進drawable資料夾。 2.在activity_main.xml裡新增下面一句,注意新增位置,/dr
App啟動時白屏&使用BitmapDrawable解決啟動頁背景圖片拉伸
一,App啟動時,會白屏或者黑屏,採用如下方法解決: 1.啟動頁的Activity設定style <activity android:name=".activity.SplashActivity" an
iOS開發 UIScrollView制作APP引導頁
touch 技術 -s code 配置 target 視圖 需要 html http://jingyan.baidu.com/article/4dc40848a341dfc8d846f152.html 聽語音 | 瀏覽:4606 | 更新:2015-02-10 12:
首頁背景圖片在PC端有顯示,在手機端不顯示的解決方法
mar 背景 如果 準備 首頁 支持 div 發現 顯示 今天看博客的資源大小,發現背景圖片有44k大的嚇人,準備壓縮一下。 壓縮之後才發現,我的背景圖片在手機端是沒有顯示的。原因是背景圖片不支持縮放。 上網查了下,發現加入如下代碼之後就支持縮放了: background-
Android 簡單引導頁實現
頁面邏輯 1.使用者開啟App,進入歡迎頁,在歡迎頁中判斷使用者是否第一次使用App(可以用Shared Preference記錄使用者使用狀態)。2.如果使用者第一次使用App,進入引導頁,使用者可以通過左右滑動檢視當前展示頁面,頁面可以是廣告,也可以是App使用說明。3.當用戶滑動到最後
必應首頁背景圖片抓包-擷取api
抓取必應圖片的方法, 作用你可以自己考慮啊。 例如給你的app每天換一個背景,或者給你的桌面換背景 畢竟,必應找的圖的質量還是可以保證的。 1.下面是獲取圖片網址的API http://cn.bing.com/HPImageArchive.aspx?format=js&am
背景圖片切換
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width
Android App 啟動頁(Splash)黑/白閃屏現象產生原因與解決辦法
驚鴻一瞥 微信的啟動頁,相信大家都不陌生。 不知道大家有沒有發現一個現象,微信每次啟動的時候,是直接進入這個啟動頁面。 我的意思是,很多應用,往往會先白屏停頓一下後再進入啟動頁面(Splash)。為了印證這一點,我把手機上所有的App都點了一遍。選幾個例子
Android App 啟動頁(Splash)黑/白閃屏現象
寫這篇文章,首先要感謝寫此文章的人,其部落格連結如下: http://blog.csdn.net/zivensonice/article/details/51691136 其讓我看到了事件發生的原委! 直接說解決方案: 方案一: 將載入頁Loading
css3全屏背景圖片切換特效
一般做圖片切換效果,都會使用JS或者jQuery指令碼,今天發現,其實只用CSS也可以實現。試試效果吧。 效果圖:程式碼如下: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type"
android App內監聽截圖加二維碼
Android截圖功能是一個常用的功能,可以方便的用來分享或者傳送給好友,本文介紹瞭如何實現app內截圖監控功能,當發現使用者在我們的app內進行了截圖操作時,進行對圖片的二次操作,例如新增二維碼,公司logo等一系列*。 專案地址 測試截圖:
C#實現動態桌面背景圖片切換
問題描述:凝視桌面背景,突感如果桌面背景是變化的像win7一樣,該多有意思啊。鬧鐘瞬間產生一個念頭,用C#寫一個動態切換桌面背景的圖片。如何實現這個想法了,我思考了一會兒,想到了如下的一些需要解決的問題: (1):以何種方式實現切換圖片,才能更符合客戶的要求。 (2):C#使用什麼技術來切換桌面的背
android在學習——Menu背景圖片,背景色的設定
package com.hooypay.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.cont
Android 專案首頁的Fragment切換例項(一)
一、首頁的Activity的佈局: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/andr