有没有办法在app小部件中使用ViewPager的行为?

时间:2014-03-07 08:35:44

标签: android android-layout android-listview android-viewpager android-appwidget

我第一次写app widget,并且知道对它有太多限制。

我知道我无法在ViewPager内使用custom view和任何app widget,但我需要使用ViewPager的左右滑动效果。请看看这个..

enter image description here

要求是,每当用户点击左箭头(左上角)时,下一个列表将从右侧滑入,有三个列表逐个显示,这将循环显示, 即。 -L1-L2-L3-L1 -

有没有办法实现这个?

2 个答案:

答案 0 :(得分:0)

如果手势不是您所寻求的,那么您应该只使用ViewFlipper。它与ViewPager类似,不同之处在于它不支持手势并且需要以实用方式更改页面。

因此,当您的用户按下左箭头时,您只需拨打viewPager.showPrev()即可返回上一页。

您还可以通过以下方式添加页面输入/退出动画:

viewFlipper.setInAnimation(context, R.anim.page_in_animation);
viewFlipper.setOutAnimation(context, R.anim.page_out_animation);
viewFlipper.showPrev();

答案 1 :(得分:0)

使用ViewFlipper来实现上述行为。

以下是扩展AppWidgetProvider

的代码
public static final String TRIGGER = "trigger";

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
    int[] allAppWidgetIds) {

    for (int appWidgetId : allAppWidgetIds) {
         RemoteViews remoteViews = new RemoteViews(context.getPackageName(),
             R.layout.layout_widget);

         Intent clickIntent = new Intent(context, CueWidgetProvider.class);
         clickIntent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
         clickIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
         clickIntent.putExtra(CueWidgetProvider.TRIGGER, 
             R.id.app_wid_fltr_next_btn);

         PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 
              0, clickIntent, PendingIntent.FLAG_UPDATE_CURRENT);
         remoteViews.setOnClickPendingIntent(R.id.app_wid_fltr_next_btn, 
            pendingIntent);

         appWidgetManager.updateAppWidget(appWidgetId, remoteViews);
    }
}

@Override
public void onReceive(Context context, Intent intent) {
    String action = intent.getAction();
    Bundle extras = intent.getExtras();
    Integer id = (Integer) (extras == null ? null : extras.get(TRIGGER));

    if (AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals(action) 
        && id != null) {

        int widgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, 0);
        onNavigate(context, widgetId, id);
    } else {
        super.onReceive(context, intent);
    }
}

protected void onNavigate(Context context, Integer widgetId, Integer id) {
    AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
    RemoteViews root = new RemoteViews(context.getPackageName(),
        R.layout.layout_widget);

    if (id == R.id.app_wid_fltr_next_btn) {
        root.showNext(R.id.app_wid_fltr_flipper);
    }

    appWidgetManager.updateAppWidget(widgetId, root);
}

提到this问题的答案。