当前位置:  编程技术>移动开发
本页文章导读:
    ▪dsPIC33EP timer4初始化设立及应用        dsPIC33EP timer4初始化设置及应用//文件 p33timer4.h #ifndef _P33TIMER4_H_ #define _P33TIMER4_H_ //#include "p33timer4.h" #define TIMER4_IEN_ENB _T4IE = 1 #define TIMER4_IEN_DIS _T4IE = 0 //timer4输入时钟分频 #define TIMER4_DIV1 .........
    ▪ 【Animation】 使用handler跟Runnable实现某一个控件的抖动效果        【Animation】 使用handler和Runnable实现某一个控件的抖动效果 布局: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_par.........
    ▪ :视频播放器与Handler 圆满调用       :视频播放器与Handler 完美调用Handler之消息循环   Handler是用于操作线程内部的消息队列的类。这有点绕,没关系,我们慢慢的来讲。前面Looper一篇讲到了Looper是用于给线程创建消息队列用的.........

[1]dsPIC33EP timer4初始化设立及应用
    来源: 互联网  发布时间: 2014-02-18
dsPIC33EP timer4初始化设置及应用
//文件 p33timer4.h

#ifndef _P33TIMER4_H_
#define _P33TIMER4_H_
//#include "p33timer4.h"



#define		TIMER4_IEN_ENB	_T4IE = 1
#define		TIMER4_IEN_DIS	_T4IE = 0

//timer4输入时钟分频
#define		TIMER4_DIV1		(0<<4)
#define		TIMER4_DIV8		(1<<4)
#define		TIMER4_DIV64	(2<<4)
#define		TIMER4_DIV256	(3<<4)

//=============================
extern void Init_Timer4(uint16 T4div,uint16 Tcon) ;

#endif


//文件 p33timer4.c

#include "global.h"
#include "p33timer4.h"

//***************************************
// 函数名称:Init_Timer4
// 函数功能:初始化timer4
// 入口参数:时钟分频系数 定时器计数个数
// 出口参数:无
// 返回值:无
// Timer4 的时钟源 = Fp(即外设时钟)
//***************************************
void Init_Timer4(uint16 T4div,uint16 Tcon)
{
	T4CON = 0X0000|T4div ;
	PR4 = Tcon ; //重装载寄存器
	TMR4 = 0x0000 ; //计数器清0
	_T4IF = 0 ;
	_T4IE = 0 ;
	T4CON |= (1<<15) ; //开启定时器2
}


//应用实例

void main(void)
{
//-----Timer4-----------------------------------
	//外设时钟64分频到时钟 计数7197次 
	Init_Timer4(TIMER4_DIV64,7197) ;//T4时钟源为外设时钟Fp
	TIMER4_IEN_ENB ;//开启定时器中断
//	TIMER4_IEN_DIS ;


	while(1)
	{

	}
	

}


    
[2] 【Animation】 使用handler跟Runnable实现某一个控件的抖动效果
    来源: 互联网  发布时间: 2014-02-18
【Animation】 使用handler和Runnable实现某一个控件的抖动效果


布局:

<LinearLayout 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"
    android:orientation="vertical"
    android:background="#000000">

   
	<Button android:layout_width="wrap_content"
	    android:layout_height="wrap_content"
	    android:id="@+id/btn"
	    android:text="Hello!"/>
</LinearLayout>



代码:   使用handler的postDelayed方法每半秒钟发送一个消息来执行动画效果,同时在handler里面使动画平移的距离缩短,当距离为零时就通过handler的removeCallbacks方法取消runnable正在执行的操作!每一次点击按钮都重置一下动画的距离,并且开启runnable,执行操作!

package com.example.viewpager;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.TranslateAnimation;
import android.widget.Button;

public class MainActivity extends Activity {
	private Button btn;
	private int length;
	Handler handler = new Handler(){
		public void handleMessage(android.os.Message msg) {
			switch (msg.what) {
			case 0:
				length -= 2.5;
				TranslateAnimation animation = new TranslateAnimation(0,length , 0, 0);
				animation.setDuration(50);
				Log.i("----", length+"");
				btn.startAnimation(animation);
				if(length==0){
					handler.removeCallbacks(runnable);
				}
				break;

			default:
				break;
			}
		};
	};
	Runnable runnable = new Runnable() {
		public void run() {
			handler.sendEmptyMessage(0);
			handler.postDelayed(this, 80);
		}
	};
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		btn = (Button) findViewById(R.id.btn);
		btn.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				length = 30;
				handler.post(runnable);
			}
		});
	}
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}



    
[3] :视频播放器与Handler 圆满调用
    来源: 互联网  发布时间: 2014-02-18
:视频播放器与Handler 完美调用
Handler之消息循环
 

Handler是用于操作线程内部的消息队列的类。这有点绕,没关系,我们慢慢的来讲。前面Looper一篇讲到了Looper是用于给线程创建消息队列用的,也就是说Looper可以让消息队列(MessageQueue)附属在线程之内,并让消息队列循环起来,接收并处理消息。但,我们并不直接的操作消息队列,而是用Handler来操作消息队列,给消息队列发送消息,和从消息队列中取出消息并处理。这就是Handler的职责。
Handler,Looper和MessageQueue是属于一个线程内部的数据,但是它提供给外部线程访问的接口,Handler就是公开给外部线程,与线程通讯的接口。换句话说,这三个东西都是用来线程间通讯用的(ITC--Inter Thread Communication),与进行间通讯(IPC--Inter Process Communication)的消息队列msgque的核心思想是一致的。MessageQueue是相对较底层的,较少直接使用,Looper和Handler就是专门用来操作底层MessageQueue的。
还有一个重要的数据结构是通讯的基本元素,就是消息对象(Message),Message从来不单独使用,它都是跟随Handler来使用的。具体方法可以参考文档,但需要注意的是同一个消息对象不能发送二次,否则会有AndroidRuntimeException: { what=1000 when=-15ms obj=.. } This message is already in use."。每次发送消息前都要通过Message.obtain()来获取新的对象,或者,对于不需要传送额外数据的直接发送空消息就好Handler.sendEmptyMessage(int)。另外也需要注意消息对象是不能手动回收的,也就是说你不能调用Message.recycle()来释放一个消息对象,因为当该对象被从队列中取出处理完毕后,MessageQueue内部会自动的去做recycle()。这个理解起来也很容易,因为发送一个消息到消息队列后,消息什么时候会被处理,对于应用程序来讲是不知道的,只有MessageQueue才会知道,所以只能由MessageQueue来做回收释放的动作。
因为Handler是用于操作一个线程内部的消息队列的,所以Handler必须依附于一个线程,而且只能是一个线程。换句话说,你必须在一个线程内创建Handler,同时指定Handler的回调handlerMessage(Message msg)。
Handler主要有二个用途,一个是用于线程内部消息循环; 另外一个就是用于线程间通讯。
Handler的基本用法可以参考文档,说的还是比较清楚的。
用于线程内部消息循环

主要是用作在将来定时做某个动作,或者循环性,周期性的做某个动作。主要的接口就是

package com.example.handler_simple;

import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;

public class MainActivity extends Activity {

	protected static final String TAG = "MainActivity";
	private static final int MEDIA_PLAYER_READY = 0;
	private static final int REFRESH_PROGRESS = 1;

	private Button mStart;
	private Button mStop;
	private Button mPause;
	private SurfaceHolder mSurfaceHolder;
	private ProgressBar mProgressBar;
	private SurfaceView mDisplay;
	private MediaPlayer mMediaPlayer;

	private Handler mMainHandler = new Handler() {
		@Override
		public void handleMessage(Message msg) {
			switch (msg.what) {
			case MEDIA_PLAYER_READY:
				mProgressBar.setMax(mMediaPlayer.getDuration());
				mMediaPlayer
						.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
							public void onCompletion(MediaPlayer mp) {
								mProgressBar.setProgress(mMediaPlayer
										.getDuration());
								mMainHandler.removeMessages(REFRESH_PROGRESS);
							}
						});
				mStart.setEnabled(true);
				mStop.setEnabled(true);
				break;
			case REFRESH_PROGRESS:
				int cp = mMediaPlayer.getCurrentPosition();
				mProgressBar.setProgress(cp);
				int delay = 1000 - (cp % 1000);
				mMainHandler.sendEmptyMessageDelayed(REFRESH_PROGRESS, delay);
				break;
			default:
				break;
			}
		}
	};

	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		initView();
	}

	private void initView() {
		// TODO Auto-generated method stub

		mStart = (Button) this.findViewById(R.id.btn_player);
		mPause = (Button) this.findViewById(R.id.btn_pause);
		mProgressBar = (ProgressBar) this.findViewById(R.id.progressbar);
		mStop = (Button) this.findViewById(R.id.btn_stop);

		
		mStart.setOnClickListener(new buttonListenner());
		mPause.setOnClickListener(new buttonListenner());
		mStop.setOnClickListener(new buttonListenner());
		mStop.setEnabled(false);
		mDisplay = (SurfaceView) findViewById(R.id.surfaceview);
		mSurfaceHolder = mDisplay.getHolder();
		mSurfaceHolder.setFixedSize(mDisplay.getWidth(), mDisplay.getHeight());
		// Do not believe the document, setType is necessary, otherwise, video
		// won't play correctly
//		mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
//		mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_HARDWARE);
		new Thread(new Runnable() {
			public void run() {
				try {
					Log.e(TAG, "Thread is runing");
					mMediaPlayer = MediaPlayer.create(getApplication(),
							R.raw.test);
					Log.e(TAG, "Thread is runing");
					mMediaPlayer.setDisplay(mSurfaceHolder);
					mMainHandler.sendEmptyMessage(MEDIA_PLAYER_READY);
				} catch (IllegalArgumentException e) {
					Log.e(TAG, "caught exception e", e);
				} catch (SecurityException e) {
					Log.e(TAG, "caught exception e", e);
				} catch (IllegalStateException e) {
					Log.e(TAG, "caught exception e", e);
				}
			}
		}).start();
	}

	private class buttonListenner implements OnClickListener {

		@Override
		public void onClick(View v) {

			switch (v.getId()) {
			case R.id.btn_player:
				  mMediaPlayer.start();  
			        mMainHandler.sendEmptyMessage(REFRESH_PROGRESS);  
              
				break;
			case R.id.btn_pause:
				 mMainHandler.removeMessages(REFRESH_PROGRESS);  
			        mMediaPlayer.pause();  

				break;
			case R.id.btn_stop:

				break;

			default:
				break;
			}

		}
	}

	@Override
	protected void onDestroy() {
		super.onDestroy();
		mMainHandler.removeMessages(REFRESH_PROGRESS);
		if (mMediaPlayer != null) {
			mMediaPlayer.release();
		}
	}

	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}

 


 

 

 

 

 


    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android实用的代码片段 常用代码总结 iis7站长之家
▪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提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


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

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

浙ICP备11055608号-3