4.1 来去电时更改归属地显示的位置

1.在手机离开屏幕时,记录view对象距离屏幕left和top的距离,将数据存入到sp存储器中
 
2.在activity加载的时候获取存在sp存储器中的值,确定view对象的位置
 
 
 
 
 
 
 
public   class   DragViewActivity   extends   Activity {
       private   static   final   String   TAG   =   "DragViewActivity" ;
       private   ImageView   iv_dragview ;
       private   WindowManager    wm ;
       private   SharedPreferences   sp ;
       private   TextView    tv_dragview ;

       @Override
       protected   void   onCreate(Bundle savedInstanceState) {
               super .onCreate(savedInstanceState);
            setContentView(R.layout.   activity_dragview );
            
               sp =getSharedPreferences(   "config" ,   MODE_PRIVATE );
               wm =(WindowManager) getSystemService(   WINDOW_SERVICE );
               iv_dragview   = (ImageView) findViewById(R.id.   iv_dragview );
             tv_dragview   =(TextView) findViewById(R.id. tv_dragview );
            
               //当activity加载时确定Toast的位置
               int   left=   sp .getInt(   "left" , 0);
               int   top=   sp .getInt(   "top" , 0);
            Log. i( TAG ,   "left:"   +left);
            Log. i( TAG ,   "top:"   +top);
            LayoutParams  params=(LayoutParams)   iv_dragview .getLayoutParams();    //获取布局参数
            params.   leftMargin =left;
            params.   topMargin =top;
               iv_dragview .setLayoutParams(params);    //设置view的布局
            
            
               //给imageview 设置触摸事件
               iv_dragview .setOnTouchListener(   new   OnTouchListener() {
                     int   startX =0;    //离屏幕左边距离
                     int   startY =0;
                  
                     //当触摸时
                     @Override
                     public   boolean   onTouch(View v, MotionEvent event) {

                           switch   (event.getAction()) {
                           case   MotionEvent.   ACTION_DOWN :     //触摸到屏幕时
                                 startX   = (   int ) event.getRawX();
                                 startY   = (   int ) event.getRawY();
                                 break ;

                           case   MotionEvent.   ACTION_MOVE :              //滑动时
                                 int   newX = (   int ) event.getRawX();
                                 int   newY = (   int ) event.getRawY();
                              
                                 int   dx = newX -   startX ;     //变化的距离
                                 int   dy = newY -   startY ;
                              
                                 int   l =   iv_dragview .getLeft()+dx;     //获取view对象移动后的位置
                                 int   r =   iv_dragview .getRight()+dx;
                                 int   t =   iv_dragview .getTop()+dy;
                                 int   b =   iv_dragview .getBottom()+dy;
                              
                              
                              
                                 //判断view对象是都超出屏幕
                                 if (l<0||t<0||r>   wm .getDefaultDisplay(). getWidth()||b>   wm .getDefaultDisplay(). getHeight()-40){
                                       break ;
                              }
                              
                              
                                 iv_dragview .layout(l, t, r, b);     //定位view对象位置
                              
                                 startX   = (   int ) event.getRawX();     //重新获取开始位置
                                 startY   = (   int ) event.getRawY();
                              
                              
                                 int   tv_height =   tv_dragview .getBottom()-   tv_dragview .getTop();
                                 //归属地提示TextView位置变化效果
                                 if   (t >   wm .getDefaultDisplay(). getHeight() / 2) {
                                       // imageview 在下方, 设置textview 在上方

                                       tv_dragview .layout(   tv_dragview .getLeft(), 0,
                                                   tv_dragview .getRight(), tv_height);
                              }   else   {
                                       // imageview 在上方, 设置textview 在下方
                                       tv_dragview .layout(   tv_dragview .getLeft(),   wm
                                                .getDefaultDisplay(). getHeight()
                                                - 40
                                                - tv_height,   tv_dragview .getRight(),   wm
                                                .getDefaultDisplay(). getHeight() - 40);

                              }
                              
                              
                              

                                 break ;
                           case   MotionEvent.   ACTION_UP :      //离开屏幕时

                                 //将view对象距离屏幕左边的距离和距离屏幕上边的距离记录到 sp存储器中
                                 int   left=   iv_dragview .getLeft();
                                 int   top=   iv_dragview .getTop();
                              Editor edit =   sp .edit();
                              edit.putInt(   "left" , left);
                              edit.putInt(   "top" , top);
                              edit.commit();
                              
                                 break ;
                        }

                           return   true ;
                  }
            });
      }
}






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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值