zoukankan      html  css  js  c++  java
  • 在Android线程中设置控件的值会报错

    在Android线程中设置控件的值一般会与Handler联合使用,如下:

    package com.yarin.android.Examples_04_15;

    import android.app.Activity;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.widget.ImageView;
    import android.widget.TextView;

    public class Activity01 extends Activity
    {
     //声明ImageView对象
     ImageView imageview;
     TextView textview;
     //ImageView的alpha值,
     int   image_alpha = 255;

     Handler  mHandler = new Handler();
     //控件线程
     boolean  isrung  = false;

     /** Called when the activity is first created. */
     @Override
     public void onCreate(Bundle savedInstanceState)
     {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);

      isrung  = true;
      
      //获得ImageView的对象
      imageview = (ImageView) this.findViewById(R.id.ImageView01);
      textview = (TextView) this.findViewById(R.id.TextView01);
      
      //设置imageview的图片资源。同样可以再xml布局中像下面这样写
      //android:src="@drawable/logo"
      imageview.setImageResource(R.drawable.logo);
      
      //设置imageview的Alpha值
      imageview.setAlpha(image_alpha);
      //开启一个线程来让Alpha值递减
      new Thread(new Runnable() {
       public void run()
       {
        while (isrung)
        {
         try
         {

          Thread.sleep(200);
          
          //更新Alpha值
          updateAlpha();
          //如果使用下面注释的代码来直接设置imageview的透明度、textview的值会报错,因为线程中不能对控件进行设置操作,需要使用一个Handler来进行对相关值的设置
    //      if (image_alpha - 7 >= 0)
    //      {
    //       image_alpha -= 7;
    //      }
    //      else
    //      {
    //       image_alpha = 0;
    //       isrung = false;
    //      }
    //      imageview.setAlpha(image_alpha);
    //      textview.setText("现在alpha值是:"+Integer.toString(image_alpha));
          
         }
         catch (InterruptedException e)
         {
          e.printStackTrace();
         }
        }

       }
      }).start();

      //接受消息之后更新imageview视图
      mHandler = new Handler() {
       @Override
       public void handleMessage(Message msg)
       {
        super.handleMessage(msg);
        imageview.setAlpha(image_alpha);
        textview.setText("现在alpha值是:"+Integer.toString(image_alpha));
        //更新
        imageview.invalidate();
       }
      };
     }
     
     public void updateAlpha()
     {
      if (image_alpha - 7 >= 0)
      {
       image_alpha -= 7;
      }
      else
      {
       image_alpha = 0;
       isrung = false;
      }
      //发送需要更新imageview视图的消息
      mHandler.sendMessage(mHandler.obtainMessage());
     }
    }

  • 相关阅读:
    软件测试的策略是什么?
    软件产品质量特性是什么?
    软件质量保证体系是什么 国家标准中与质量保证管理相关的几个标准是什么?他们的编号和全称是什么?
    简述什么是静态测试、动态测试、黑盒测试、白盒测试、α测试 β测试
    mac上的GNU gcc报错:dyld: Library not loaded: /usr/local/opt/isl/lib/libisl.22.dylib的解决办法
    两行信息量大的shell代码
    mac上的less使用扩展正则表达式比如
    设置mac默认使用GNU工具,比如使用GNU cat而不是BSD cat
    macos 10.15/Catalina 用不了gdb
    vscode的coderunner插件介绍
  • 原文地址:https://www.cnblogs.com/tianguook/p/2422460.html
Copyright © 2011-2022 走看看