如何在popupWindow中嵌入的画布和活动之间进行通信

时间:2017-10-31 19:16:40

标签: android canvas ondraw android-popupwindow

我想将统计页面显示为活动的弹出窗口。我的问题是如何将数据交给画布绘制它?

我的popupWindow xml是:

createPanel(50, 0, 100, 25, buttonNames)

我的弹出式启动片段是:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/gradient_dark_teal_bg">

    <LinearLayout
        android:id="@+id/llvStats"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:background="@drawable/gradient_teal_bg"
        android:orientation="vertical">

        <TextView
            android:id="@+id/txtBanner"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:layout_marginBottom="10dp"
            android:gravity="center_vertical|center_horizontal|center"
            android:text="STATISTICS"
            android:textColor="@color/colorTeal1"
            android:textSize="24sp"
            android:textStyle="bold|italic" />

        <com.mairyu.app.lingoflash.StatsDrawCanvas
            android:id="@+id/statsCanvasDraw"
            android:layout_below="@+id/txtBanner"
            android:layout_width="400dp"
            android:layout_height="500dp"
            android:layout_column="1"
            android:layout_gravity="left|top"
            android:background="@drawable/gradient_light_teal_bg"
            android:layout_row="0" />

    </LinearLayout>

</RelativeLayout>

我想看到这样的事情:

enter image description here

由于这不是一项新活动,我不能使用intent / bundle方法来交换变量(或者我可以吗?)。如果它是简单的textview或其他小部件,我可以使用 case R.id.btnDatabaseStats: layoutInflater = (LayoutInflater) getBaseContext().getSystemService(LAYOUT_INFLATER_SERVICE); popupView = layoutInflater.inflate(R.layout.stats_popup_window,null); popupWindow = new PopupWindow(popupView,STATS_POPUP_WIDTH,STATS_POPUP_HEIGHT); popupWindow.showAtLocation(findViewById(R.id.database_page), Gravity.CENTER, STATS_POPUP_GRAVITY_X, STATS_POPUP_GRAVITY_Y); LinearLayout llvStats = (LinearLayout) popupView.findViewById(R.id.llvStats); llvStats.setOnTouchListener(new OnSwipeTouchListener(this) { @Override public void onSwipeLeft() { popupWindow.dismiss(); } }); 等,但我需要在画布中获取数据。

我认为我仍然不了解如何使用setText和其他画布功能,但是现在我只是对这些数字进行了硬编码。是否有一种简单的方法可以简单地从发布活动中获取这些数字(5/15/25)? (我尝试了一个全局变量,但它在onDraw

中不可见
onDraw

希望这是明确的,而不是太业余......

1 个答案:

答案 0 :(得分:0)

实际上看起来很简单,现在我只是在canvas类中使用方法调用:

Jan 31st

并在 public void setBar(ArrayList<Integer> left, ArrayList<Integer> top, ArrayList<Integer> right, ArrayList<Integer> bottom) { barCoordLeft = left; barCoordTop = top; barCoordRight = right; barCoordBottom = bottom; invalidate(); } 中访问这些全局变量。

在我启动弹出窗口的活动中,我通过以下方式获取画布:

onDraw

然后通过方法调用传递数据:

statsDrawCanvas = (StatsDrawCanvas) popupView.findViewById(R.id.statsCanvasDraw);