J2me中实现淡入淡出效果【收录】

J2me中实现淡入淡出效果
3["ixQ`KE0飘飘白云(l_zhaohui@163.com)

    在J2me中实现淡入淡出效果,据我所知至少有三种方法。3GEYE5u1q$o,}?-Kk
第一种是取得需要变换图片的像素,依次设置每个象素的alpha通道值,让它在0~100之间变化。
N{"Bt P0~0    第二种是修改图片的调色板数据,让其在调色板原始数据到255之间变化。
8o+j(P~@0    第三种,其实也是利用上面的办法,先描画图片,然后在图片上覆盖一个黑色矩形,改变这个黑色矩形透明度就可以实现淡入淡出的效果。
(t4Ho3M"D!c a a8R S0    前两种方法相比较的话,第一种方法运算量是比较大的,而且第一种方法由于midp1.0不支持alpha通道,在一些手机上无法实现。

    下面给出第二种方法的示例,在我们开始之前,应该熟悉png文件格式,如果还不是很明白的话,可以google一下,或者查看前面的帖子中的相关连接。

3GEYE+tXQ /~:~3MGw
    代码很清楚,下面是源代码

------------CODE__START-----------------------
*c"s'R+n/VJ9Sb0import java.io.DataInputStream;
6~%C Iy _~4cl0import java.util.Timer;
"c[3E!z'f6ve T0import java.util.TimerTask;

import javax.microedition.lcdui.Canvas;3GEYE5T9h&H6H(}*C xK w
import javax.microedition.lcdui.Display;
4flPh~AACi0import javax.microedition.lcdui.Graphics;
4fGnLO'D0import javax.microedition.lcdui.Image;3GEYEB3}p }[+L"I3^
import javax.microedition.midlet.MIDlet;3GEYE:_0r+Gv-n
import javax.microedition.midlet.MIDletStateChangeException;

/**
_ ez6q.DA5_0 * Discription      : 修改调色板数据实现淡入淡出效果3GEYExU/0P(mX /7_A
 * Author           : 飘飘白云(l_zhaohui@163.com)3GEYE@E{)`xA8T%a
 * Created date     : 2006/07/13 18:06:393GEYEK*E a f"[Lk
 * Modified history :
N4s~3cL7WJQ0 */

public class PngFadeInOut extends MIDlet
UeG|)I2Tp8O+X/ C `o0{3GEYE5n(a#IzSI5jP4F G;N+E
                           GameCanvas canvas;3GEYEcv{#I;a2F~
                  Display display;
$})J/r*^n%F0                            public PngFadeInOut()3GEYEc.k`*d+[lAb,Gh
                            {
e|/}6Vz)s0                                          super();
/h-pgJl7u0                                          try {3GEYEIYW{-FsrSM
                          display = Display.getDisplay(this);
zKy!r9D0                          canvas = new GameCanvas(this);3GEYEAdS:f'Q%c
                      } catch (Exception e) {}3GEYE0hCQ F$S)_
                            }

                            protected void startApp() throws MIDletStateChangeException
4n#UJ7Y4x KG+SR0                            {3GEYE4MZ%{#?)CC�eU t?1YYP
                                          if( canvas != null ){
gn x iN7V0z$j'A0                                                        display.setCurrent(canvas);3GEYEa&x ftak't{
                                                        canvas.start();3GEYE7G�bH2S `5rr
                                          }3GEYE1R$c+y4@.V{ k1@ A
                            }

                            protected void pauseApp()3GEYEj-Pmh~(K v,|a
                            {3GEYEQ1|M s mrv!`
                                          canvas.isExit = true;3GEYE,at.C ?6q{ q.l7M'b
                            }

                            protected void destroyApp( boolean arg0) throws MIDletStateChangeException
/'XsfJ*w9U"?0                            {3GEYE!HC d6[h0GGN
                            }
'g0T$^_E;V-EP1G$B[!j�]0              }

              class GameCanvas extends Canvas3GEYE~c ~BOL6km
              {
7?#Qx'Lqi,?0                            static String imageName = "/fadeInOut.png";
vchPn L-T0                            public static final int    MAX_TARDINESS = 30;
x9wzX5t$` m0                           3GEYE[(b�^7wF ?7a}c
                            //---------------------------------------------------
0EVrg'nE0                            PngFadeInOut app;3GEYEcR,aY/R5n
                            boolean isInited = false;3GEYE+Vf{%WL,m+/g1D
                            public boolean isExit = false;

                            Image offImage             = null;3GEYE3m.C7x,KF-k+s/s
                            public Graphics             g = null;
Pr.IZ_6`1T5{0                            int scrW;
V*?QHmlb6Q'V0                            int scrH;

                            //---------------------------------------------------3GEYE/N1M1EL#i4|O` Q0Ko
                            int gameMode;3GEYE9Q(d+tq(w
                            int subMode;
N9_&l0y.Q~0                           3GEYEe)RL/g,K re
                            static final int smInit = 0;
9l�q t;nS%}X!V0                            static final int smProc = 1;3GEYEk6/:`Q-e2r
                            static final int smEnd = 2;
9P i]q4@@0                           3GEYEjGdi F]
                            static final int gmStart = 0;3GEYE,w;qu[8`"c%X
                           
m|/UwW#c R0                            //---------------------------------------------------
}&h@p2A9y0                            Image testImage = null;3GEYEXCh5h+l+EY i6P
                           3GEYEe/e(]X8c'E EH
                            byte[] oldRGBData = null;
g"T!TR]0                            byte[] imgData = null;3GEYEl`#k5H/y1Z
                           3GEYE"z6M�b ^ ?
                            static final int FADE_IN = 0;
+}(x1_D$@@-[0                            static final int FADE_OUT = 1;
/G�S^;i4x7]]P%i0                            static final int FADE_STEP = 1;3GEYEK,l Jz5uR
                           
f /&PFz6R'SG0                            static int fadeType = FADE_IN;
5v1RN0VP0                           
j[EkCo&m,[!g0                            //---------------------------------------------------3GEYE#?Ge(t7?s7/l@
                            //---Timer process
"/whue0                            //---------------------------------------------------3GEYEdK@ o:a$/*Z9qf9Qf
                            TimerTask task;
,JWe;wr!C0                            Timer timer;3GEYE+m'[1hf/}2bm~
                            int timerDelayTime;
J�o;MZ7MO0                            public boolean isTimerRunning;
6HMNX/rC;v0                           
(L/tVg'Ek/V0                            void startTimer(int delayTime){
8n~@9MP4d^0                                          timerDelayTime = delayTime;
L`-{`8V&d0                                          isTimerRunning = true;
"EUs{ PL0                                         
:gK/ZEzi!c.y-S0                                          timer = new Timer();3GEYE�trh5X*Rs U#jET
                                          task = new ProcessingRunner();3GEYE;K2Mu%l,^(A"o
                                          timer.scheduleAtFixedRate(task, 0, delayTime);3GEYE5v;N4b2q2R;e7kEA$l*b
                            }3GEYE a H%y]*P5} N
                           
N{o@u0                            public void stopTimer(){
9S~a�PWZ2j O0                                          if( task != null )
@,/B c n(KeE�t0                                                        task.cancel();3GEYE;w(m.@g&ut�iK�N
                                         3GEYE,/ C5D4LG
                                          isTimerRunning = false;3GEYEI i ^jyg+mSF9b
                                          timer = null;3GEYE O5e|HwZ
                                          task = null;3GEYE Ex,sa/L]"_6J
                            }3GEYE T[(x/X6Pu5UQ"l1R
                            //-----------------------------------------------------3GEYE"H'P ] b;/D0k1S,u_-j
                            class ProcessingRunner extends TimerTask
,`H a/P%Xy4D7r){et0                            {
EfI./8|/0                                          public void run()3GEYE1Bv7`Gg{0lH�X&]T-N
                                          {3GEYEq.K G&G.cct)wjp*~
                                                        if( isExit ) {
p:Xc,Vn-mm[Kw0                                                                      stopTimer();3GEYEet k@-SDc,_1yz0k%Z
                                                                      app.notifyDestroyed();3GEYE(mTI%P(h?$LN|
                                                        }
8[5H*|+xx.~!m0                                                       
6H-g|5SW2ZY8ZL0                                                        if (!isTimerRunning || System.currentTimeMillis() -
,n9J5ei }�]0                                                                                    scheduledExecutionTime() >= timerDelayTime)3GEYE*l a ZK)l5K)s
                                                        {3GEYE}M+J6L,i
                                                                      return;
Br!V6i {]0                                                        }

                                                        gameMain();3GEYEv:^'kw/D"b)@%q F8`
                                                        gameDraw();
.LA OQb?D3~0                                                       3GEYE�~ |#jH }�O C$t:Xa*?^
                                                        repaint();3GEYEF'Ayo1t#R
                                                        serviceRepaints();3GEYE:Sije~;mHy I Gxz
                                                        System.gc();3GEYE`6d'Z qC7R)M[w,dH
                                          }3GEYE:{IT;MkOg
                            }3GEYE.R5L*Ex!`,@@3Q
                            //-------------------------------------------------
0cz�ZN.A%iuE9S0                           3GEYE7q ZO$h ~d.{P
                            public GameCanvas(MIDlet midlet)3GEYE,Aa2MkdsP�yk@,b
                            {3GEYEVW8ks&jWg x'j
                                          app = (PngFadeInOut)midlet;
zU:r aM*^*Ub@ M0                            }

             
M(X oNYxP'o0                           3GEYE}"lSt4yN)o
                            public void start()3GEYE4yIT1ufQ5F
                            {
*w C(~!y w)I@ A0                                          setFullScreenMode(true);
xe+dX!rj8UR*w9I0                                          while (!isShown())3GEYE E6M)l'vW5s
                                                        ;3GEYEL@4~%F JNp+W
                                         3GEYEu:n(oyB'{
                                          if( !isInited ) {
nnb7Z$cM0                                                        gameInit();3GEYEs"B@.r6L+X2{3Q"o
                                                        isInited = true;3GEYE(`'XVV$c?)x
                                          }

                                          startTimer(MAX_TARDINESS);3GEYEs)GS:Oz!W
                            }3GEYE1J@/(t cl8w2lMkr
                           3GEYE+LY_@ s8g&W3f ]
                            void gameInit()3GEYEX-]t,Oq$l/?A
                            {
`gc-DtaL)F'l"^;H0                                          scrW = getWidth();
gq#D7C7ss'c'D0                                          scrH = getHeight();

                                          if(g == null || offImage == null) {
+HI?v)D0                                                        offImage = Image.createImage(scrW, scrH);
1q_+P.Q+h0                                              g = offImage.getGraphics();
(?7R.MA�gdxF0                                          }3GEYEN2o^k,Xl3k0`
                                         
;M J+st]n6T;C0                                          changeGameMode(gmStart);3GEYE x2v1p�z9]7T
                            }

                            public void changeGameMode(int gm){3GEYE(]-~!xM x V[
                                          gameMode = gm;3GEYEXbc1AJ-p3JT P
                                          subMode = smInit;3GEYE3m I ?HIx/iQ
                            }
0D,U/Q4g/GG!{ XX0                           
MciyXn"^X D)t0                            //---------------------------------------------------
c5G#M!Gag0                            // 游戏主逻辑处理3GEYENAi/Y fq#c*J2q
                            //---------------------------------------------------
ht {q7m"H/V0                            void gameMain()
v5j%P7IfZ i G0                            {
r*yq3EI ?"m0                                          if( gameMode == gmStart )
4w} Hp Be0                                          {3GEYE.B5S MRlol4];j
                                                        if( subMode == smInit )3GEYEQ�h8N_7^ B
                                                        {3GEYEb;]:qI6?
                                                                      // 取得图片的二进制数据
H t^9k&Z,eHjt0                                                                      imgData = loadFile(imageName);3GEYEC+L2W/H;h
                                                       
'vFET(F0                                                                      //保存原始图片的调色板rgb数据3GEYE"P$t{q+Kks6O(v%n0q
                                                                      oldRGBData = getPlteRGBData(imgData);
k/s+~+t!ju0                                                       
-[*m+a*JZu$nsh0                                                                      if( fadeType == FADE_IN) {3GEYE [j(O4i jC9viiz
                                                                                    // 设置调色板颜色为白色,淡入效果
Z_,x sE@Y0                                                                                    for(int i = rgbDataStartPos; i < rgbDataStartPos + rgbDataLength;i++ ) {3GEYE/KL,ubO2V2b$H
                                                                                                  imgData[i] = (byte)255;
:pq9b/U%fC�FZH0                                                                                    }
-F?;vKO0 

 

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值