• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            xiaoguozi's Blog
            Pay it forword - 我并不覺的自豪,我所嘗試的事情都失敗了······習慣原本生活的人不容易改變,就算現狀很糟,他們也很難改變,在過程中,他們還是放棄了······他們一放棄,大家就都是輸家······讓愛傳出去,很困難,也無法預料,人們需要更細心的觀察別人,要隨時注意才能保護別人,因為他們未必知道自己要什么·····

            Android動畫學習筆記

              3.0以前,android支持兩種動畫模式,tween animation,frame animation,在android3.0中又引入了一個新的動畫系統:property animation,這三種動畫模式在SDK中被稱為property animation,view animation,drawable 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>為根元素,以<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 Country 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接口,如:

            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()

            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() {
              @Override
              public 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。
            1
            2
            3
            4
            5
            6
            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的定義:

            1
            2
            3
            4
            5
            6
            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,當有子元素可見性改變時,可以向其應用動畫,通過LayoutTransition類應用此類動畫:

            transition.setAnimator(LayoutTransition.DISAPPEARING, customDisappearingAnim);

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

            • APPEARING        當一個元素變為Visible時對其應用的動畫
            • CHANGE_APPEARING   當一個元素變為Visible時,因系統要重新布局有一些元素需要移動,這些要移動的元素應用的動畫
            • DISAPPEARING      當一個元素變為InVisible時對其應用的動畫
            • CHANGE_DISAPPEARING 當一個元素變為Gone時,因系統要重新布局有一些元素需要移動,這些要移動的元素應用的動畫 disappearing from the container.

              第二個參數為一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封裝,然后通過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:轉換坐標(control where the View is located as a delta from its left and top coordinates which are set by its layout container.)
            • rotation,rotationX,rotationY:旋轉,rotation用于2D旋轉角度,3D中用到后兩個
            • scaleX,scaleY:縮放
            • x,y:View的最終坐標(utility properties to describe the final location of the View in its container, as a sum of the left and top values and translationX and translationY values.)
            • 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);



            分類: android
            0
            0
            (請您對文章做出評價)
            « 博主前一篇:Android 2.0以后的Contacts API--ContactsContract
            » 博主后一篇:Android Touch事件
            posted @ 2011-12-02 17:16 AngelDevil 閱讀(2755) 評論(3) 編輯 收藏

            發表評論
             回復 引用 查看   
            #1樓2011-12-05 11:16 | qianqianlianmeng      
            寫的很不錯哈!!!不知道如何才能聯系上 作者呢??
             回復 引用 查看   
            #2樓[樓主]2011-12-05 11:52 | AngelDevil      
            @qianqianlianmeng
            都是SDK上的嘛,簡易翻譯吧

             回復 引用 查看   
            #3樓2012-01-18 09:25 | vanezkw      
            好文章。
            posted @ 2012-03-06 01:42 小果子 閱讀(1348) | 評論 (0)編輯 收藏
                 摘要: 實現思路,剛開始的時候我是用ViewFlipper控件來做非常的簡單但是實現不了拖拽移動屏幕的效果,最終放棄決定自定義一個控件實現這樣效果。 接下來我詳細的解說一下我開發時寫的這個實驗demo,軟件中用的滑屏就是由這樣的代碼實現的。        首先新建一個控件類TouchPageView并且繼承自ViewGroup,左右滑動換屏我的實現是在TouchP...  閱讀全文
            posted @ 2012-03-01 17:06 小果子 閱讀(688) | 評論 (0)編輯 收藏
                 摘要: [轉載]android滑動之Scroller 原文地址:android滑動之Scroller作者:jaly19870729 正文   一、結構     public class Scroller extends Object   ...  閱讀全文
            posted @ 2012-03-01 16:51 小果子 閱讀(499) | 評論 (0)編輯 收藏
            打開php.ini,首先找到
            ;;;;;;;;;;;;;;;;
            ; File Uploads ;
            ;;;;;;;;;;;;;;;;
            區域,有影響文件上傳的以下幾個參數:

            file_uploads   =   on   ;是否允許通過HTTP上傳文件的開關。默認為ON即是開

            upload_tmp_dir   ;文件上傳至服務器上存儲臨時文件的地方,如果沒指定就會用系統默認的臨時文件夾

            upload_max_filesize   =   8m   ;望文生意,即允許上傳文件大小的最大值。默認為2M


            ;;;;;;;;;;;;;;;;;
            ; Data Handling ;
            ;;;;;;;;;;;;;;;;;
            區域,還有一項:

            post_max_size   =   8m ;指通過表單POST給PHP的所能接收的最大值,包括表單里的所有值。默認為8M

            一般地,設置好上述四個參數后,上傳<=8M的文件是不成問題,在網絡正常的情況下。

            但如果要上傳>8M的大體積文件,只設置上述四項還一定能行的通。除非你的網絡真有100M/S的上傳高速,否則你還得關心關心下面的參數:

            ;;;;;;;;;;;;;;;;;;;
            ; Resource Limits ;
            ;;;;;;;;;;;;;;;;;;;

            max_execution_time   =   600 ;每個PHP頁面運行的最大時間值(秒),默認30秒

            max_input_time = 600 ;每個PHP頁面接收數據所需的最大時間,默認60秒

            memory_limit   =   8m   ;每個PHP頁面所吃掉的最大內存,默認8M
            posted @ 2012-02-25 03:05 小果子 閱讀(133) | 評論 (0)編輯 收藏
            到目前為止,在Android交易市場(Android Market)里,已經有我的2個應用程序了,所以,我想寫出一點關于Android應用程序發布過程的東西,用來告訴那些想發布自己的應用程序的朋友們,在發布過程中會遇到哪些的事情。

              在發布你的應用程序之前,你首先要做的事情是為你的應用做數字化簽名認證。在Google的Android開發者網站上,有一個整版都是介紹簽 名問題頁面,但如果你使用的是帶有ADT (Android Developer Tools)插件的Eclipse來開發的,這個過程會變的出奇的簡單:你在Package Explorer視圖里右鍵點擊你的應用項目名稱,然后在右鍵菜單里選擇“Android Tools”,然后選擇“Export Signed Application Package”(導出簽名應用程序包)。這會啟動一個簽名引導窗口,它會帶著你一步一步走下去,基本上都是一些簡單的填寫表格的操作,你要提供用于簽名 的正確的信息,這些信息以后都會用得到。當這個過程做完之后,你最終得到的是一個屬于你的應用程序的keystore文件和一個簽過字的.apk安裝文 件。我建議把你的所有的keystore文件都放在一個地方(keystore文件和它所屬的應用具有相同的名字),因為當你以后發布升級版的應用時都要 用它來簽名。

              一旦你有了簽名過的.apk文件,你就該考慮你的應用程序的界面快照圖問題了,這些圖片將會在Android交易市場里展示你的應用時使用。 Android交易市場只允許你上傳兩張快照,所以你要選出哪兩張圖片最能顯示你的應用程序的本質特征,而且要在縮小一半的尺寸后仍然能看到清:你的這些 圖片在Android市場里的應用描述中會被縮小,用戶可以點擊它來看全尺寸的圖片,我不知道能有多少人知道可以這樣操作。

              你有兩種辦法來捕捉屏幕快照:你可以使用Eclispe Android插件里自帶的Android設備模擬器上的快照工具,或者啟動你的Android設備,使用一個像drocap2這樣的抓屏程序(更新:事實上,在SDK里有一個工具能夠在不啟動你的應用的情況下進行抓屏)。Android交易市場只接受320×480 或 480×854 像素大小的截屏,所有你要保證你的圖片大小符合這兩種圖片比例大小。

              你還要為你的應用提供一個標題,并包括一個簡短描述。你的應用的標題最長是30個英文字符,但請注意,在Android的首頁屏幕里,應用程序 啟動圖片的下方只會顯示你的標題的8到9個字符。應用的描述的字數最多是325個字符:我不知道為什么Google會選擇這樣一個特別的長度限制,但這就 意味著你的用詞一定要斟酌。確保你使用的描述詞是用戶用手機在Android交易市場里搜索時最喜歡用到的詞匯。

              你還需要為你的應用程序留下聯系信息,其中的一項是URL。我建議你們的這個URL應該是指向你的應用程序的web網頁,這個網頁上你可以提供 關于你的應用的更詳細的介紹說明,以及其它更豐富的屏幕截圖,這些信息對那些在Android交易市場里搜索到你的應用程序,并想了解更詳細的信息的人來 說非常的有用。

              一旦你的應用程序有了標題,介紹,屏幕快照,以及聯系信息,你該去http://market.android.com/publish /Home這個地址到Android交易市場的發布商區域進行注冊,成為一個正式的開發商。你需要支付一次性的25美元的注冊費。一旦注冊完成,你就能訪 問開發者控制臺web界面,這里你可以從”Upload
            Application”鏈接進入到一個能夠上傳你的.apk文件的頁面,包括上傳你的截 屏圖片,你還要補充一下其它的必須的信息。當所有的信息都符合要求,你就可以讓你的應用程序能夠被公開下載了,單擊這個頁面上的“Publish”按鈕, 你的應用程序就成功的在交易市場里上架了。

              如果你的應用是收費的,你需要設立一個Google商務賬戶(Google Merchant Account)。除非你想運營一個真正的應用開發商店,你只需要簡單的選擇把你的所有應用銷售收入都存放到你選擇的銀行帳號里,這個過程非常的直接簡 單:你需要知道的只是這個開戶過程需要1至2天的時間。有了賬戶后,Google就會每天一次的把你的銷售收入打入你提供的賬戶里(不包括要求退款的收 入,周末和銀行假期不結帳)。用戶可以在購買你的應用后的24小時內選擇“退貨”(超過24小時意味著不能退貨),所以Google會自動的在你的商務賬 戶里扣下足夠的錢來保證退款事務(也就是說Google不需要從你的銀行賬戶里要錢)。Google的支付工具會讓你看到所有的交易信息,包括退款和交易 取消記錄。

              應用程序發布了之后,你可以從開發者控制臺(Developer Console)里跟蹤你的應用程序在交易市場里的所有表現。控制臺里列舉了你的所有應用以及:

            告訴你每個應用程序都被下載了多少次。 告訴你當前有多少臺設備上安裝了你的應用(我不完全的確信他們能跟蹤這樣的信息,但很顯然他們做到了)。 告訴你每個應用都獲得了多少次用戶的評級,以及平均等級(從1顆星到5顆星) 提供一個“評論”鏈接,它指向一個頁面,里面有每個評級的詳細信息,以及使用你的應用的用戶留下的評論列表。

              這些數據看起來是一兩天刷新一次。

              如果你的應用程序一開始沒有多少的下載量,不要氣餒:除非你在博客界或技術新聞界做了市場推廣活動,用戶只能用他們的手機在Android交易市場里搜索應用時搜到你的應用。如果你想擴大你的應用的曝光度:

            在諸如AndroidZoom, helloandroid.com,和 AndroidPIT這樣的網站上提交你的應用信息。AndroidZoom 這個網站做的非常好,它讓你指明在Android交易市場里擁有哪些應用(這個網站拉取了官方的交易市場數據),讓你能夠提供更多的描述信息和額外的截屏 圖片。 在一些諸如anddev.org這樣的Android論壇里的專門用于聲明新的Android應用的版塊里宣傳你的應用。 搜尋一些能夠接受對你的應用程序進行評論的Android新聞網站,比如Androinica 和 DroidWeb:也許他們不會給你回復(我就是),但不妨一試。

            novembbp.b0.upaiyun.com\/0dd268a319dd726dcb7fd43259b7ca90\/08df0db7d3f9519b843d468af0f5afdf.jpg
            posted @ 2012-02-13 14:10 小果子 閱讀(1891) | 評論 (0)編輯 收藏
            僅列出標題
            共58頁: First 18 19 20 21 22 23 24 25 26 Last 
            日韩亚洲欧美久久久www综合网 | 美女久久久久久| 久久久久久国产精品免费免费| 久久亚洲欧美日本精品| 久久激情亚洲精品无码?V| 国产精品久久久久久久久久影院| 中文字幕日本人妻久久久免费| 99久久久国产精品免费无卡顿| 久久国产成人午夜aⅴ影院 | 亚洲精品国产成人99久久| 久久人人爽人人澡人人高潮AV| 久久久久久精品久久久久| 久久综合欧美成人| 亚洲中文字幕久久精品无码喷水| 粉嫩小泬无遮挡久久久久久| 亚洲欧洲中文日韩久久AV乱码| …久久精品99久久香蕉国产| 久久只有这里有精品4| 国产亚洲婷婷香蕉久久精品| 国产偷久久久精品专区 | 欧美精品福利视频一区二区三区久久久精品 | 成人国内精品久久久久影院| 中文国产成人精品久久亚洲精品AⅤ无码精品 | 久久久久久无码国产精品中文字幕 | 久久亚洲精品无码VA大香大香| 亚洲国产天堂久久综合网站| 久久精品黄AA片一区二区三区| 久久丫忘忧草产品| 久久这里有精品视频| 久久精品国产福利国产琪琪| 亚洲国产成人久久精品影视| 久久er国产精品免费观看2| 久久夜色精品国产网站| 亚洲国产精品无码久久久不卡 | 欧美久久一级内射wwwwww.| 天天久久狠狠色综合| 99国产精品久久| 国产精品久久久久久久久鸭| 国产午夜福利精品久久2021| 9久久9久久精品| 青青青青久久精品国产h|