【问题标题】:switching an image widget in timeline在时间轴中切换图像小部件
【发布时间】:2020-05-13 06:50:09
【问题描述】:

我想创建一个带有延时切换图像的 android 小部件。我不知道该怎么做。我应该在方法 onUpdate 中创建线程吗? 我的 layout.xml 文件的这个例子:

    <ImageButton
        android:id="@+id/imageViewWGT"
        android:background="@drawable/dog" />

这就是我想知道的正确方法:

public class MainActivity extends AppWidgetProvider {
    private int counter = 0;
    private ImageView wgt_img;
    wgt_img = wgt_img.findViewById(R.id.imageViewWGT);

    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {

        new Thread(new Runnable() {
            @Override
            public void run() {
                while (true) {
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {

                            if (counter%2 == 0){
                                wgt_img.setImageResource(R.drawable.dog);
                            }else
                                wgt_img.setImageResource(R.drawable.cat);

                        }
                    });
                    counter++;
                    try {
                        Thread.sleep(1000);     // sleep 1 sec
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();
    }
}

【问题讨论】:

    标签: android android-studio android-widget delay


    【解决方案1】:

    你可以使用Handler类的postDelayed方法

    // Initialisation
    Handler handler = new Handler();
    int counter = 0;
    long switchDelay = 1000L;
    
    // Function for switch images
    public void switchImage(){
         handler.postDelayed(new Runnable() {
             @Override
             public void run() {
                 if (counter%2 == 0){
                     wgt_img.setImageResource(R.drawable.dog);
                 }else {
                     wgt_img.setImageResource(R.drawable.cat);
                 }
                 counter++;
                 // Recall method
                 switchImage();
             }
         }, 1000);
     }
    

    【讨论】:

    • 我应该在方法onUpdate 中使用函数switchImage() 吗?
    • @allobzor 是的,你这样做
    【解决方案2】:

    当您需要按时运行一段代码时,您可以使用 Timer。 看看这个示例代码:

    new Timer().scheduleAtFixedRate(new TimerTask() 
        {
            @Override
            public void run() 
            {
                //you'r code        
            }
        } , DELAY , PERIOD);
    

    在 run 方法中添加您的代码并替换您的延迟和执行时间段而不是 DELAY 和 PERIOD 。 DELAY 和 PERIOD 是毫秒

    如果你想延迟运行你的块代码一次,你可以使用 Handler。

    new Handler().postDelayed(new Runnable() 
        {
            @Override
            public void run() 
            {
                //you'r code
            }
        } , DEALY_MILLIS);
    

    【讨论】:

      【解决方案3】:

      android 有一个默认方法来更新时间轴中的小部件

      <appwidget-provider
          ...
          ...
          ...
          ...
          android:updatePeriodMillis="1000000">
      </appwidget-provider>
      

      但如果您至少 30 分钟更新小部件,它会起作用

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-04-16
        • 1970-01-01
        • 2021-02-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-24
        • 1970-01-01
        相关资源
        最近更新 更多