在时间轴中切换图像小部件
Posted
技术标签:
【中文标题】在时间轴中切换图像小部件【英文标题】: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();
【问题讨论】:
【参考方案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 分钟更新小部件,它会起作用
【讨论】:
以上是关于在时间轴中切换图像小部件的主要内容,如果未能解决你的问题,请参考以下文章