当前位置:  编程技术>移动开发
本页文章导读:
    ▪AsyncTask中应用ProgressDialog以及activity之间传递对象        AsyncTask中使用ProgressDialog以及activity之间传递对象 public class MyTask extends AsyncTask<Void, Void, Void> {        private volatile boolean running = true;      private final ProgressDialog progressDialog;        public.........
    ▪ 在Qt使用中强制使用横屏或竖屏        在Qt应用中强制使用横屏或竖屏 在Qt应用中强制使用横屏或竖屏 From Forum Nokia Wiki 摘要:本文介绍怎么在Qt for Symbian程序中即使手机水平状态发生变化的时候强制使用横屏或竖屏。 对于带有水.........
    ▪ *gif 解码 - 实践       *.gif 解码 - 实践 *.gif decode 前面已经说过 今天不打算再说了   鉴于自定义组件View 很多人反映看不懂 所以今天想以此为例 再详细演示一遍     主要目标: 定义 TypegifView  用于显示目标*.gif .........

[1]AsyncTask中应用ProgressDialog以及activity之间传递对象
    来源: 互联网  发布时间: 2014-02-18
AsyncTask中使用ProgressDialog以及activity之间传递对象
public class MyTask extends AsyncTask<Void, Void, Void> { 
 
    private volatile boolean running = true; 
    private final ProgressDialog progressDialog; 
 
    public MyTask(Context ctx) { 
        progressDialog = gimmeOne(ctx); 
 
        progressDialog.setCancelable(true); 
        progressDialog.setOnCancelListener(new OnCancelListener() { 
            @Override 
            public void onCancel(DialogInterface dialog) { 
                // actually could set running = false; right here, but I'll 
                // stick to contract. 
                cancel(true); 
            } 
        }); 
 
    } 
 
    @Override 
    protected void onPreExecute() { 
        progressDialog.show(); 
    } 
 
    @Override 
    protected void onCancelled() { 
        running = false; 
    } 
 
    @Override 
    protected Void doInBackground(Void... params) { 
 
        while (running) { 
            // does the hard work 
        } 
        return null; 
    } 
 
    // ... 
 
} 

这两天要用一个对象的传递始终找不到好的方法,后来在传递bitMap时这个对象时有了点启发
可以讲一个类扩展为implement Serializable interface 

//传递: 
   intent.putExtra("MyClass", obj);   
 
// to retrieve object in second Activity 
getIntent().getSerializableExtra("MyClass"); 

    
[2] 在Qt使用中强制使用横屏或竖屏
    来源: 互联网  发布时间: 2014-02-18
在Qt应用中强制使用横屏或竖屏
在Qt应用中强制使用横屏或竖屏
From Forum Nokia Wiki


摘要:本文介绍怎么在Qt for Symbian程序中即使手机水平状态发生变化的时候强制使用横屏或竖屏。

对于带有水平传感器的Symbian手机,在用户将手机从横屏模式(Landscape)切换到竖屏模式(Portrait)时,系统会自动调整手机的屏幕显示方向,满足用户正常的使用需要。屏幕横宽比的变化,需要应用调整窗口的布局,以保证更好的用户体验。

但是在某些特殊场合中(比如游戏),开发者可能希望即使手机的水平状态已经变化,需要屏幕继续保持原来的屏幕方向,提示用户只能在横屏或者竖屏方向上使用当前的应用,这就需要通过设置,让手机屏幕强制处在横屏或者竖屏状态。

Qt的当前版本(Qt-4.6.2)并没有提供直接控制Symbian 手机屏幕模式的API,需要通过使用Symbian的API来完成。设置API函数为:CAknAppUi::SetOrientationL(); 在Qt中的使用显示代码如下:

#ifdef Q_OS_SYMBIAN
void MyWidget::setPortraitMode()
{
    CAknAppUi *aknAppUi = dynamic_cast<CAknAppUi *>(CEikonEnv::Static()->AppUi());
    if (aknAppUi)
        aknAppUi->SetOrientationL(CAknAppUi::EAppUiOrientationPortrait);
}
 
void MyWidget::setLandscapeMode()
{
    CAknAppUi *aknAppUi = dynamic_cast<CAknAppUi *>(CEikonEnv::Static()->AppUi());
    if (aknAppUi)
        aknAppUi->SetOrientationL(CAknAppUi::EAppUiOrientationLandscape);
}
#endif

要使用上面代码中的Symbian函数,需要在代码里把symbian的几个相关头文件加入到源码中

#ifdef Q_OS_SYMBIAN
#include <eikenv.h>
#include <coemain.h>
#include <aknappui.h>
#endif

并且需要在Qt的.pro工程文件中加入以下内容,保证应用能够编译和链接

symbian {
    LIBS += -lconnmon -lcone -lavkon
}

注意:该功能在模拟器上不能模拟,但是在Symbian手机上工作正常。


    
[3] *gif 解码 - 实践
    来源: 互联网  发布时间: 2014-02-18
*.gif 解码 - 实践

*.gif decode 前面已经说过 今天不打算再说了

 

鉴于自定义组件View 很多人反映看不懂 所以今天想以此为例 再详细演示一遍

 

 

主要目标: 定义 TypegifView  用于显示目标*.gif 且 extends View

 

 

[代码 步骤]

 

1. 定义xml所需 属性描述字串 在res\values 新增文件:attra.xml 定义如下:

 

<?xml version="1.0" encoding="utf-8"?>
<resources>
     <declare-styleable name="TypegifView">
     	<!-- set *.gif source, as resource id -->
        <attr name="src" format="integer" />
        
        <!-- set frequency to update bitmap, as int-->
        <attr name="delta" format="integer" />
    </declare-styleable>
</resources>

 

 

2. 定义TypegifView 构造函数 供*.java调用:

 

public TypegifView(Context context) {
		super(context);
		// TODO Auto-generated constructor stub
		init();
		
}

 

如何使用:

 

TypegifView tgView = new TypegifView(this);

 

3.  定义TypegifView 构造函数 供*.xml调用 且根据传入属性描述字串 设置相应函数

 

public TypegifView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
        
        TypedArray ta = context.obtainStyledAttributes(attrs,
                R.styleable.TypegifView);
        int n = ta.getIndexCount();
        
        for(int i =0;i < n;i++){
        	int attr = ta.getIndex(i); 
        	
        	switch(attr){
        	case R.styleable.TypegifView_src:
        		int id = ta.getResourceId(
        				R.styleable.TypegifView_src, 0);
        		setSrc(id);
        		
        	case R.styleable.TypegifView_delta:
        		int idelta = ta.getInteger(R.styleable.TypegifView_delta, 1);
        		setDelta(idelta);
        		
        	default:
        		break;
        	}
        	
        }
        
        ta.recycle();
	}
	
	public void init(){
		// do some initial 
		
	}
	
	
	public void setSrc(int id){
		gHelper = new TypegifOpenHelper();
		gHelper.read(this.getResources().openRawResource(id));
		
		 bmp=gHelper.getFrame(0);
		 Thread updateTimer =new Thread(this);
		 updateTimer.start();
	}
	
	public void setDelta(int is){
		delta = is;
	}

 

如何使用:

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:gif="http://schemas.android.com/apk/res/org.android.view"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<!-- to introduce gif namespace  -->
<org.android.view.TypegifView xmlns:gif="http://schemas.android.com/apk/res/org.android.view"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    gif:src="/blog_article/@raw/kitty/index.html"
    gif:delta="10"
    />
<TextView
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="-----------[我是分割线!]-------------"
    />
</LinearLayout>

 

 

 

 4. 属性:src delta 设置:

 

public void setSrc(int id){
		gHelper = new TypegifOpenHelper();
		gHelper.read(this.getResources().openRawResource(id));
		
		 bmp=gHelper.getFrame(0);
		 Thread updateTimer =new Thread(this);
		 updateTimer.start();
	}
	
	public void setDelta(int is){
		delta = is;
	}

 

 

5.  取得该gif所占用的宽度 高度   如果没有该函数 该组件后面不可以再有别的控件 个人猜测其返回值会是整个屏幕

 

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        setMeasuredDimension(measureWidth(widthMeasureSpec),
                measureHeight(heightMeasureSpec));
    }
	
private int measureWidth(int measureSpec) {
        return gHelper.getWidth();
}

private int measureHeight(int measureSpec) {
        return gHelper.getHeigh();
}

 

 

6. 该View 执行画的回调函数:

 

protected void onDraw(Canvas canvas) {
		// TODO Auto-generated method stub
		canvas.drawBitmap(bmp, 0,0,new Paint());
		bmp=gHelper.nextBitmap();
		
	}

 

7. 定义延时Thread 定时更新下一张bitmap

 

public void run() {
		// TODO Auto-generated method stub
		while(true){
	    	  try{
	    		this.postInvalidate();
	    		Thread.sleep(gHelper.nextDelay()/delta) ; 
	    	  }catch(Exception ex){
	    		  
	    	  }
	      }
	}

 

 

9. emulator 运行截图:

 

 

 

10. 因为描述的比较不细致 所以补上全部代码 供大家分享

 

 

 

1 楼 mgssnake 2010-05-04  
终于看到解析gif的东西,以后做动画效果,就简单多了
2 楼 稻-草 2010-05-05  
你的线程什么时候结束呢?
3 楼 gryphone 2010-05-05  
稻-草 写道
你的线程什么时候结束呢?

结束?不能结束 因为*.gif 是不断循环的
4 楼 稻-草 2010-05-05  
那如果控件不用了呢,如弹出个对话框,然后关闭对话框。
5 楼 yuanliyin 2010-05-05  
对咱这种美工差的人是个福音!
6 楼 lishali12345 2010-05-09  
由于项目中需要使用到GIF解码的东西,刚好在JE上看到,甚感幸福啊
不过我在阅读楼主提供的代码时发现有一个问题,就是readShort()函数的实现
// read 8 bit data
protected int readShort() {
// read 16-bit value, LSB first
return read() | (read() << 8 );
}
这个考虑的是小端字节序存储吗?为何确定就是小端字节序呢,而没有考虑别的方式呢,这个与PC上Java编程时通过二进制流读取来获取short值的方法是一致的吗?
7 楼 热血pk007 2010-09-08  
你好,要是加载的gif图片背景是透明的,但是最终在模拟器上显示的背景是黑色的是怎么回事,要改动哪个代码呢?
8 楼 15921310063 2011-03-22  
我是借助工具获得每帧,然后实现的。觉得还是比较麻烦。
还是代码的比较方便。学习了。
9 楼 nciky1984 2011-03-25  
Android 自己的  android.graphics.Movie类是支持gif的

具体例子可以看 ApiDemo 里的BitmapDecode例子

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android中GPS定位的用法实例 iis7站长之家
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3