本次实现的是类似于墨迹天气中轨迹图片上指针随着数值滚动滑动的效果,基本思路是开启线程,控制指针所在的imageview控件的padding属性。

  <FrameLayout            android:layout_width="fill_parent"            android:layout_height="wrap_content"            android:background="#fff"            android:paddingBottom="5dp"            android:paddingLeft="5dp"            android:paddingRight="2dp"            >            <ImageView                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:layout_gravity="right"                android:src="@drawable/up_icon"                android:layout_marginTop="0dp"                android:paddingTop="0dp" />            <LinearLayout                android:layout_width="240dip"                android:layout_height="wrap_content"                android:layout_marginLeft="5dp"                android:layout_marginRight="7dp"                android:orientation="horizontal" >                <TextView                    android:layout_width="0dp"                    android:layout_height="wrap_content"                    android:layout_weight="1"                    android:gravity="left"                    android:text="优"                    android:textSize="12sp" />                <TextView                    android:layout_width="0dp"                    android:layout_height="wrap_content"                    android:layout_weight="1"                    android:gravity="left"                    android:text="良"                    android:textSize="12sp" />                <TextView                    android:layout_width="0dp"                    android:layout_height="wrap_content"                    android:layout_weight="1"                    android:gravity="left"                    android:text="中等"                    android:textSize="12sp" />                <TextView                    android:layout_width="0dp"                    android:layout_height="wrap_content"                    android:layout_weight="1"                    android:gravity="left"                    android:text="不健康"                    android:textSize="12sp" />                <TextView                    android:layout_width="0dp"                    android:layout_height="wrap_content"                    android:layout_weight="1"                    android:gravity="left"                    android:text="有毒害"                    android:textSize="12sp" />            </LinearLayout>                                    <LinearLayout                android:layout_width="240dip"                android:layout_height="wrap_content"                android:layout_marginLeft="5dp"                android:layout_marginRight="7dp"                android:layout_marginTop="40dp"                android:orientation="horizontal" >                <TextView                    android:layout_width="0dp"                    android:layout_height="wrap_content"                    android:layout_weight="1"                    android:gravity="center_horizontal"                    android:text="80"                    android:textSize="12sp" />                <TextView                    android:layout_width="0dp"                    android:layout_height="wrap_content"                    android:layout_weight="1"                    android:gravity="center_horizontal"                    android:text="120"                    android:textSize="12sp" />                <TextView                    android:layout_width="0dp"                    android:layout_height="wrap_content"                    android:layout_weight="1"                    android:gravity="center_horizontal"                    android:text="160"                    android:textSize="12sp" />                <TextView                    android:layout_width="0dp"                    android:layout_height="wrap_content"                    android:layout_weight="1"                    android:gravity="center_horizontal"                    android:text="200"                    android:textSize="12sp" />                <TextView                    android:layout_width="0dp"                    android:layout_height="wrap_content"                    android:layout_weight="1"                    android:gravity="center_horizontal"                    android:text="400"                    android:textSize="12sp" />            </LinearLayout>            <ImageView                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:layout_marginLeft="10dp"                android:layout_marginTop="10dp"                android:src="@drawable/zhizhen"                android:id="@+id/zhizhen"/>            <ImageView                android:id="@+id/dengji_img"                android:layout_width="250dip"                android:layout_height="wrap_content"                android:layout_marginTop="25dp"                android:src="@drawable/dengji_icon" />        </FrameLayout>

上面这段代码实现的布局为

首先,因为指针有压着下面的滚动条,因此这是一个framelayout的布局。其次,要实现指针的匀速滚动,需要开启一个线程,在线程中能够实现利用循环,以及线程的休眠,通过控制指针所在图标的padding属性来实现滚动的动画效果

    Handler myHandler =new Handler(){        @Override        public void handleMessage(Message msg) {            // TODO Auto-generated method stub            super.handleMessage(msg);            //对于c的更改和循环应该是在线程中跑,要不run仅仅执行一次,                        zhizhen.setPadding(c, 0, 0, 0);        }                     };    class MyThread extends Thread{        @Override        public void run() {            //发送一个消息,通知主线程改变UI         try {                         while(c<=input){                 c=c+1;                 this.sleep(10);                 myHandler.sendEmptyMessage(0);                              }                                     } catch (InterruptedException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }

为了控制指针滑动的距离和对应的数值相对应,可以采用以下方法,通过比例来进行控制:

    class myTh extends Thread {        @Override        public void run() {            super.run();            length_margin = dengji_width - zhizhen_width;            if (aqi < 200) {                Float aqi_proportion = (float) aqi / 300;                margin_length = (float) aqi_proportion * length_margin;            }            if (aqi >= 200 && aqi < 300) {                Float aqi_proportion = (float) 200 / 300;                Float margin = (float) aqi_proportion * length_margin;                margin_length = margin + (float) (aqi - 200) / 2 / 300                        * length_margin;            }            if (aqi >= 300) {                Float aqi_proportion = (float) 270 / 300;                margin_length = (float) aqi_proportion * length_margin;            }            // if(i/300>1 && i%300>0){            // }            c = 0;            while (c <= margin_length) {                c = c + 1;                try {                    Thread.sleep(2);                    handler.sendEmptyMessage(0);                } catch (InterruptedException e) {                    e.printStackTrace();                }            }        }    }

更多相关文章

  1. Android能否在子线程刷新UI
  2. Android线程调度机制
  3. android中的线程池
  4. Android异步更新UI-线程池-Future-Handler实例分析
  5. Android 进程和线程模型
  6. Android Handler 线程消息机制
  7. Android——进程与线程
  8. [Android] Android进程和线程模型

随机推荐

  1. 跟Google学习Android开发-工具篇-Android
  2. android中MediaRecorder的架构介绍
  3. Android(安卓)O使用通知遇到的坑
  4. 纯代码实现 Android(安卓)登陆布局.
  5. android2.3 鼠标输入集成
  6. Android菜单定制总结
  7. INSTALL_PARSE_FAILED_MANIFEST_MALFORME
  8. 拍照-----------android系统 至关重要的
  9. 解开Android应用程序组件Activity的"sing
  10. android 权限集合