当前位置:  编程技术>移动开发
本页文章导读:
    ▪AlarmManager大局定时器/闹钟        AlarmManager全局定时器/闹钟 public static class alarmreceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub if(intent.get.........
    ▪ 仿的一个动画片菜单效果(转)        仿的一个动画菜单效果(转) 记得在eoe上有人发过,但代码质量不好。我重写了一下,抽成了控件。但没有经过各种控件的相容性测试,如果和其他控件的相容性不好,就直接在activity中写代码.........
    ▪ 让视图中的内容竖过来展示       让视图中的内容竖过来显示   前几天写了一篇文章:获取当前日期时间并以LCD形式显示,按照这篇文章实践后的最终效果,时间是横着显示的,类似下图这样:   ......

[1]AlarmManager大局定时器/闹钟
    来源: 互联网  发布时间: 2014-02-18
AlarmManager全局定时器/闹钟
public static class alarmreceiver extends BroadcastReceiver{

        @Override
        public void onReceive(Context context, Intent intent) {
            // TODO Auto-generated method stub
            if(intent.getAction().equals("short")){
                Toast.makeText(context, "short alarm", Toast.LENGTH_LONG).show();
            }else{
                Toast.makeText(context, "repeating alarm", 
                      Toast.LENGTH_LONG).show();
            }
        }
    } 

 在Android上常用的定时器有两种,一种是Java.util.Timer,一种就是系统的AlarmService了。 

实验1:使用Java.util.Timer。 
在onStart()创创建Timer,每5秒更新一次计数器,并启动。 mTimer = new Timer();        

mTimer.schedule(new TimerTask() {
            @Override
            public void run() { 
                ++mCount; 
                mHandler.sendEmptyMessage(0);                
            } 
        }, 5*1000, 5*1000); 

  当连接USB线进行调试时,会发现一切工作正常,每5秒更新一次界面,即使是按下电源键,仍然会5秒触发一次。 
当拔掉USB线,按下电源键关闭屏幕后,过一段时间再打开,发现定时器明显没有继续计数,停留在了关闭电源键时的数字。 

实验2:使用AlarmService每隔5秒发送一个广播: 
2.1,设置setRepeating()的类型为AlarmManager.ELAPSED_REALTIME的情况 

 

 

AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);   
am.setRepeating(AlarmManager.ELAPSED_REALTIME,firstTime,5*1000,sender);
 

 

 

拔掉USB线,按下电源键,过一段时间再次打开屏幕,发现定时器没有继续计数。 
2.2,设置setRepeating()的类型为AlarmManager.ELAPSED_REALTIME_WAKEUP的情况 

 

 

AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);    
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime, 5*1000, sender);
 

 

 

拔掉USB线,按下电源键,过一点时间再次打开屏幕,发现定时器一直在计数。 

如此看来,使用WAKEUP才能保证自己想要的定时器一直工作,但是肯定会引起耗电量的增加。 

http://www.cnblogs.com/jico/archive/2010/11/03/1868361.html 
AlarmManager的使用机制有的称呼为全局定时器,有的称呼为闹钟。通过对它的使用,个人觉得叫全局定时器比较合适,其实它的作用和Timer有点相似。都有两种相似的用法:(1)在指定时长后执行某项操作(2)周期性的执行某项操作 
AlarmManager对象配合Intent使用,可以定时的开启一个Activity,发送一个BroadCast,或者开启一个Service. 
下面的代码详细的介绍了两种定时方式的使用: 
(1)在指定时长后执行某项操作(单次闹钟) 

 

//操作:发送一个广播,广播接收后Toast提示定时操作完成
Intent intent =new Intent(Main.this, alarmreceiver.class);
intent.setAction("short");
PendingIntent sender=PendingIntent.getBroadcast(Main.this, 0, intent, 0);
//设定一个五秒后的时间
Calendar calendar=Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, 5);
    
AlarmManager alarm(AlarmManager)getSystemService(ALARM_SERVICE);
alarm.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),sender);
//或者以下面方式简化
//alarm.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+5*1000, sender);
    
Toast.makeText(Main.this, "五秒后alarm开启",Toast.LENGTH_LONG).show();

 //注意:receiver记得在manifest.xml注册 

 

 

Intent intent =new Intent(Main.this, alarmreceiver.class);
intent.setAction("repeating");
PendingIntent sender=PendingIntent.getBroadcast(Main.this, 0, intent, 0);
    
//开始时间
long firstime=SystemClock.elapsedRealtime();
AlarmManager am=(AlarmManager)getSystemService(ALARM_SERVICE);
//5秒一个周期,不停的发送广播
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,firstime, 5*1000, sender);

 AlarmManager的setRepeating()相当于TimerSchedule(task,delay,peroid);有点差异的地方时Timer这个方法是指定延迟多长时间 

以后开始周期性的执行task; 
AlarmManager的取消:(其中需要注意的是取消的Intent必须与启动Intent保持绝对一致才能支持取消AlarmManager) 

 

Intent intent =new Intent(Main.this, alarmreceiver.class);

intent.setAction("repeating");

PendingIntent sender=PendingIntent.getBroadcast(Main.this, 0, intent, 0);

AlarmManager alarm=(AlarmManager)getSystemService(ALARM_SERVICE);

alarm.cancel(sender);


 

 

 

 

 

 


    
[2] 仿的一个动画片菜单效果(转)
    来源: 互联网  发布时间: 2014-02-18
仿的一个动画菜单效果(转)

记得在eoe上有人发过,但代码质量不好。我重写了一下,抽成了控件。但没有经过各种控件的相容性测试,如果和其他控件的相容性不好,就直接在activity中写代码吧,应该差不多的。 
我用的是平板,所以效果还行,不知道手机如何。 

 

 
代码: 

Java代码   
  • package com.ql.view;  
  •   
  • import android.R.anim;  
  • import android.content.Context;  
  • import android.util.AttributeSet;  
  • import android.util.Log;  
  • import android.view.LayoutInflater;  
  • import android.view.View;  
  • import android.view.animation.Animation;  
  • import android.view.animation.RotateAnimation;  
  • import android.view.animation.ScaleAnimation;  
  • import android.view.animation.TranslateAnimation;  
  • import android.view.animation.Animation.AnimationListener;  
  • import android.widget.Button;  
  • import android.widget.RelativeLayout;  
  •   
  • import com.ql.app.R;  
  •   
  • public class AnimButtons extends RelativeLayout{  
  •   
  •     private Context context;  
  •     private int leftMargin=0,bottomMargin=0;  
  •     private final int buttonWidth=58;//图片宽高  
  •     private final int r=180;//半径  
  •     private final int maxTimeSpent=200;//最长动画耗时  
  •     private final int minTimeSpent=80;//最短动画耗时  
  •     private int intervalTimeSpent;//每相邻2个的时间间隔  
  •     private Button[] btns;  
  •     private Button btn_menu;  
  •     private RelativeLayout.LayoutParams params;  
  •     private boolean isOpen = false;//是否菜单打开状态  
  •     private float angle;//每个按钮之间的夹角  
  •     public AnimButtons(Context context) {  
  •         super(context);  
  •         // TODO Auto-generated constructor stub  
  •         this.context=context;  
  •     }  
  •     public AnimButtons(Context context, AttributeSet attrs) {  
  •         super(context, attrs);  
  •         // TODO Auto-generated constructor stub  
  •         this.context=context;  
  •     }  
  •       
  •     @Override  
  •     protected void onFinishInflate() {  
  •         // TODO Auto-generated method stub  
  •         super.onFinishInflate();  
  •         View view=LayoutInflater.from(context).inflate(R.layout.anim_buttons, this);  
  •           
  •         initButtons(view);  
  •           
  •     }  
  •   
  •     private void initButtons(View view){  
  •         // TODO Auto-generated method stub  
  •         //6个按钮,具体视情况而定  
  •         btns=new Button[6];  
  •         btns[0] = (Button) view.findViewById(R.id.btn_camera);  
  •         btns[1] = (Button) view.findViewById(R.id.btn_with);  
  •         btns[2] = (Button) view.findViewById(R.id.btn_place);  
  •         btns[3] = (Button) view.findViewById(R.id.btn_music);  
  •         btns[4] = (Button) view.findViewById(R.id.btn_thought);  
  •         btns[5] = (Button) view.findViewById(R.id.btn_sleep);  
  •         btn_menu = (Button) view.findViewById(R.id.btn_menu);  
  •           
  •         leftMargin=((RelativeLayout.LayoutParams)(btn_menu.getLayoutParams())).leftMargin;  
  •         bottomMargin=((RelativeLayout.LayoutParams)(btn_menu.getLayoutParams())).bottomMargin;  
  •           
  •         for(int i=0;i<btns.length;i++){  
  •             btns[i].setLayoutParams(btn_menu.getLayoutParams());//初始化的时候按钮都重合  
  •             btns[i].setTag(String.valueOf(i));  
  •             btns[i].setOnClickListener(clickListener);  
  •         }  
  •           
  •         intervalTimeSpent=(maxTimeSpent-minTimeSpent)/btns.length;//20  
  •         angle=(float)Math.PI/(2*(btns.length-1));  
  •     }  
  •       
  •     @Override  
  •     protected void onSizeChanged(int w, int h, int oldw, int oldh) {  
  •         // TODO Auto-generated method stub  
  •         super.onSizeChanged(w, h, oldw, oldh);  
  •         final int bottomMargins=this.getMeasuredHeight()-buttonWidth-bottomMargin;  
  • //      Log.i("tag", "bottomMargins====="+bottomMargins);  
  •         btn_menu.setOnClickListener(new OnClickListener() {  
  •               
  •             @Override  
  •             public void onClick(View v) {  
  •                 // TODO Auto-generated method stub                    
  •                 if(!isOpen){  
  •                     isOpen = true;  
  • //                  btn_menu.startAnimation(animRotate(-45.0f, 0.5f, 0.45f));  
  •                     for(int i=0;i<btns.length;i++){  
  •                         float xLenth=(float)(r*Math.sin(i*angle));  
  •                         float yLenth=(float)(r*Math.cos(i*angle));  
  • //                      Log.i("tag", "xLenth======"+xLenth+",yLenth======"+yLenth);  
  •                         btns[i].startAnimation(animTranslate(xLenth, -yLenth, leftMargin+(int)xLenth, bottomMargins - (int)yLenth, btns[i], minTimeSpent+i*intervalTimeSpent));  
  •                     }  
  •                       
  •                 }  
  •                 else{                     
  •                     isOpen = false;  
  • //                  btn_menu.startAnimation(animRotate(90.0f, 0.5f, 0.45f));  
  •                     for(int i=0;i<btns.length;i++){  
  •                         float xLenth=(float)(r*Math.sin(i*angle));  
  •                         float yLenth=(float)(r*Math.cos(i*angle));  
  • //                      Log.i("tag", "xLenth======"+xLenth+",yLenth======"+yLenth);  
  •                         btns[i].startAnimation(animTranslate(-xLenth, yLenth, leftMargin, bottomMargins, btns[i], maxTimeSpent-i*intervalTimeSpent));  
  •                     }  
  •                 }  
  •                       
  •             }  
  •         });  
  •           
  •     }  
  •     private Animation animScale(float toX, float toY){  
  •         // TODO Auto-generated method stub  
  •         Animation animation = new ScaleAnimation(1.0f, toX, 1.0f, toY, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);  
  •         animation.setInterpolator(context, anim.accelerate_decelerate_interpolator);  
  •         animation.setDuration(400);  
  •         animation.setFillAfter(false);  
  •         return animation;  
  •           
  •     }  
  •       
  •     private Animation animRotate(float toDegrees, float pivotXValue, float pivotYValue){  
  •         // TODO Auto-generated method stub  
  •         final Animation animation = new RotateAnimation(0, toDegrees, Animation.RELATIVE_TO_SELF, pivotXValue, Animation.RELATIVE_TO_SELF, pivotYValue);  
  •         animation.setAnimationListener(new AnimationListener(){  
  •               
  •             @Override  
  •             public void onAnimationStart(Animation animation){  
  •                 // TODO Auto-generated method stub  
  •                   
  •             }  
  •               
  •             @Override  
  •             public void onAnimationRepeat(Animation animation){  
  •                 // TODO Auto-generated method stub  
  •                   
  •             }  
  •               
  •             @Override  
  •             public void onAnimationEnd(Animation animation){  
  •                 // TODO Auto-generated method stub  
  •                 animation.setFillAfter(true);  
  •             }  
  •         });  
  •         return animation;  
  •     }  
  •       
  •       
  •     private Animation animTranslate(float toX, float toY, final int lastX, final int lastY,  
  •             final Button button, long durationMillis){  
  •         // TODO Auto-generated method stub  
  •         Animation animation = new TranslateAnimation(0, toX, 0, toY);                 
  •         animation.setAnimationListener(new AnimationListener(){  
  •                           
  •             @Override  
  •             public void onAnimationStart(Animation animation){  
  •                 // TODO Auto-generated method stub  
  •                                   
  •             }  
  •                           
  •             @Override  
  •             public void onAnimationRepeat(Animation animation) {  
  •                 // TODO Auto-generated method stub  
  •                               
  •             }  
  •                           
  •             @Override  
  •             public void onAnimationEnd(Animation animation){  
  •                 // TODO Auto-generated method stub  
  •                 params = new RelativeLayout.LayoutParams(0, 0);  
  •                 params.height = buttonWidth;  
  •                 params.width = buttonWidth;                                           
  •                 params.setMargins(lastX, lastY, 0, 0);  
  •                 button.setLayoutParams(params);  
  •                 button.clearAnimation();  
  •                           
  •             }  
  •         });                                                                                               
  •         animation.setDuration(durationMillis);  
  •         return animation;  
  •     }  
  •       
  •     View.OnClickListener clickListener=new View.OnClickListener(){  
  •   
  •         @Override  
  •         public void onClick(View v) {  
  •             // TODO Auto-generated method stub  
  •             int selectedItem=Integer.parseInt((String)v.getTag());  
  •             for(int i=0;i<btns.length;i++){  
  •                 if(i==selectedItem){  
  •                     btns[i].startAnimation(animScale(2.0f, 2.0f));  
  •                 }else{  
  •                     btns[i].startAnimation(animScale(0.0f, 0.0f));  
  •                 }  
  •             }  
  •             if(onButtonClickListener!=null){  
  •                 onButtonClickListener.onButtonClick(v, selectedItem);  
  •             }  
  •         }  
  •           
  •     };  
  •       
  •     public boolean isOpen(){  
  •         return isOpen;  
  •     }  
  •       
  •     private OnButtonClickListener onButtonClickListener;  
  •     public interface OnButtonClickListener{  
  •         void onButtonClick(View v,int id);  
  •     }  
  •     public void setOnButtonClickListener(OnButtonClickListener onButtonClickListener){  
  •         this.onButtonClickListener=onButtonClickListener;  
  •     }  
  • }  

  • 布局anim_buttons.xml: 

    Xml代码   
  • <?xml version="1.0" encoding="utf-8"?>  
  • <RelativeLayout   
  •     xmlns:android="http://schemas.android.com/apk/res/android"  
  •     android:layout_width="fill_parent"  
  •     android:layout_height="fill_parent"   
  •     android:background="#FFF"  
  •     >  
  •     <Button android:id="@+id/btn_sleep"  
  •         android:layout_width="wrap_content"   
  •         android:layout_height="wrap_content"  
  •         android:background="@drawable/composer_sleep"  
  •         android:layout_alignParentLeft="true"  
  •         android:layout_alignParentBottom="true"  
  •         />  
  •   
  •     <Button android:id="@+id/btn_thought"  
  •         android:layout_width="wrap_content"   
  •         android:layout_height="wrap_content"  
  •         android:background="@drawable/composer_thought"  
  •         android:layout_alignParentLeft="true"  
  •         android:layout_alignParentBottom="true"  
  •         />  
  •   
  •     <Button android:id="@+id/btn_music"  
  •         android:layout_width="wrap_content"   
  •         android:layout_height="wrap_content"  
  •         android:background="@drawable/composer_music"  
  •         android:layout_alignParentLeft="true"  
  •         android:layout_alignParentBottom="true"  
  •         />  
  •   
  •     <Button android:id="@+id/btn_place"  
  •         android:layout_width="wrap_content"   
  •         android:layout_height="wrap_content"  
  •         android:background="@drawable/composer_place"  
  •         android:layout_alignParentLeft="true"  
  •         android:layout_alignParentBottom="true"  
  •         />  
  •   
  •     <Button android:id="@+id/btn_with"  
  •         android:layout_width="wrap_content"   
  •         android:layout_height="wrap_content"  
  •         android:background="@drawable/composer_with"  
  •         android:layout_alignParentLeft="true"  
  •         android:layout_alignParentBottom="true"  
  •         />  
  •   
  •     <Button android:id="@+id/btn_camera"  
  •         android:layout_width="wrap_content"   
  •         android:layout_height="wrap_content"  
  •         android:background="@drawable/composer_camera"  
  •         android:layout_alignParentLeft="true"  
  •         android:layout_alignParentBottom="true"  
  •         />  
  •   
  •     <Button android:id="@+id/btn_menu"  
  •         android:layout_width="58dip"   
  •         android:layout_height="58dip"  
  •         android:background="@drawable/friends_delete"  
  •         android:layout_alignParentLeft="true"  
  •         android:layout_alignParentBottom="true"  
  •         android:layout_marginLeft="10dip"  
  •         android:layout_marginBottom="10dip"  
  •     />  
  • </RelativeLayout>  


  • 用法: 

    Java代码   
  • public void onCreate(Bundle savedInstanceState){  
  •         super.onCreate(savedInstanceState);  
  •         setContentView(R.layout.main);  
  •           
  •         AnimButtons animButtons=(AnimButtons)findViewById(R.id.animButtons);  
  •         animButtons.setOnButtonClickListener(new AnimButtons.OnButtonClickListener() {  
  •               
  •             @Override  
  •             public void onButtonClick(View v, int id) {  
  •                 // TODO Auto-generated method stub  
  •                 Log.i("tag", "id============="+id);  
  •             }  
  •         });  
  •           
  •     }  

  • Xml代码   
  • <?xml version="1.0" encoding="utf-8"?>  
  • <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  •     android:layout_width="fill_parent"  
  •     android:layout_height="fill_parent"  
  •     android:orientation="vertical" >  
  •   
  •     <TextView  
  •         android:layout_width="fill_parent"  
  •         android:layout_height="wrap_content"  
  •         android:text="@string/hello" />  
  • <!--  layout_width,layout_height最好是fill_parent参数 -->  
  •     <com.ql.view.AnimButtons  
  •         android:id="@+id/animButtons"  
  •         android:layout_width="fill_parent"  
  •         android:layout_height="fill_parent"  
  •         />  
  • </LinearLayout>  

  •     
    [3] 让视图中的内容竖过来展示
        来源: 互联网  发布时间: 2014-02-18
    让视图中的内容竖过来显示

     

    前几天写了一篇文章:获取当前日期时间并以LCD形式显示,按照这篇文章实践后的最终效果,时间是横着显示的,类似下图这样:

     



        
    最新技术文章:
    ▪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提高之MediaPlayer播放网络视频的实现方法...
    ▪Android提高之手游转电视游戏的模拟操控
     


    站内导航:


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

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

    浙ICP备11055608号-3