- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
全屏好像有两种定义
android 全屏 = 没有任务栏,没有状态栏或按钮,只是填满屏幕
android plot full-screen = 左右和底部没有图例,只是一个全屏图形小部件
这个问题与 Android 全屏有关,通过滑动 Action 使任务栏和按钮栏隐藏(全屏)或显示...它不会将图形部分向下扩展(填充)到图例在底部
以下内容基于Android plot 1.4.3
创建一个带有空 Activity 的新 android studio 2.3.2 项目并将 Android plot 演示应用程序的“简单 xy plot”java 代码复制到 onCreate 并将 xml 部分复制到布局 xml 文件中工作正常并且图形部分全部展开通往底部传说的道路
创建一个带有全屏 Activity 的新 android studio 2.3.2 项目(使用滑动操作来隐藏/显示任务栏和按钮栏)设置无法将图形部分向下扩展到底部图例
与第一个空 Activity 示例相比,android studio 生成的默认 Activity 代码框架现在更加复杂
带有“//zzz ...”的行表示与android studio生成的代码有偏差
全屏 Activity java代码启动
package com.efilabs.plotxynew;
import android.annotation.SuppressLint;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Handler;
import android.view.MotionEvent;
import android.view.View;
import com.androidplot.xy.XYPlot;
/**
* An example full-screen activity that shows and hides the system UI (i.e.
* status bar and navigation/system bar) with user interaction.
*/
public class ActPlotNew0 extends AppCompatActivity
{
/**
* Whether or not the system UI should be auto-hidden after
* {@link #AUTO_HIDE_DELAY_MILLIS} milliseconds.
*/
private static final boolean AUTO_HIDE = true;
/**
* If {@link #AUTO_HIDE} is set, the number of milliseconds to wait after
* user interaction before hiding the system UI.
*/
private static final int AUTO_HIDE_DELAY_MILLIS = 3000;
/**
* Some older devices needs a small delay between UI widget updates
* and a change of the status and navigation bar.
*/
private static final int UI_ANIMATION_DELAY = 300;
private final Handler mHideHandler = new Handler ();
private View mContentView; // zzz
//private XYPlot mContentView; // zzz
private final Runnable mHidePart2Runnable = new Runnable ()
{
@SuppressLint ("InlinedApi")
@Override
public void run ()
{
// Delayed removal of status and navigation bar
// Note that some of these constants are new as of API 16 (Jelly Bean)
// and API 19 (KitKat). It is safe to use them, as they are inclined
// at compile-time and do nothing on earlier devices.
mContentView.setSystemUiVisibility (View.SYSTEM_UI_FLAG_LOW_PROFILE
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
}
};
private View mControlsView;
private final Runnable mShowPart2Runnable = new Runnable ()
{
@Override
public void run ()
{
// Delayed display of UI elements
ActionBar actionBar = getSupportActionBar ();
if (actionBar != null) {
actionBar.show ();
}
mControlsView.setVisibility (View.VISIBLE);
}
};
private boolean mVisible;
private final Runnable mHideRunnable = new Runnable ()
{
@Override
public void run ()
{
hide ();
}
};
/**
* Touch listener to use for in-layout UI controls to delay hiding the
* system UI. This is to prevent the jarring behavior of controls going away
* while interacting with activity UI.
*/
private final View.OnTouchListener mDelayHideTouchListener = new View.OnTouchListener ()
{
@Override
public boolean onTouch (View view, MotionEvent motionEvent)
{
if (AUTO_HIDE) {
delayedHide (AUTO_HIDE_DELAY_MILLIS);
}
return false;
}
};
@Override
protected void onCreate (Bundle savedInstanceState)
{
super.onCreate (savedInstanceState);
setContentView (R.layout.act_plotnew0);
mVisible = true;
mControlsView = findViewById (R.id.fullscreen_content_controls);
mContentView = findViewById (R.id.fullscreen_content); // zzz
// mContentView = (XYPlot) findViewById (R.id.fullscreen_content); // zzz
// Set up the user interaction to manually show or hide the system UI.
mContentView.setOnClickListener (new View.OnClickListener ()
{
@Override
public void onClick (View view)
{
toggle ();
}
});
// Upon interacting with UI controls, delay any scheduled hide()
// operations to prevent the jarring behavior of controls going away
// while interacting with the UI.
findViewById (R.id.dummy_button).setOnTouchListener (mDelayHideTouchListener);
}
@Override
protected void onPostCreate (Bundle savedInstanceState)
{
super.onPostCreate (savedInstanceState);
// Trigger the initial hide() shortly after the activity has been
// created, to briefly hint to the user that UI controls
// are available.
delayedHide (100);
}
private void toggle ()
{
if (mVisible) {
hide ();
} else {
show ();
}
}
private void hide ()
{
// Hide UI first
ActionBar actionBar = getSupportActionBar ();
if (actionBar != null) {
actionBar.hide ();
}
mControlsView.setVisibility (View.GONE);
mVisible = false;
// Schedule a runnable to remove the status and navigation bar after a delay
mHideHandler.removeCallbacks (mShowPart2Runnable);
mHideHandler.postDelayed (mHidePart2Runnable, UI_ANIMATION_DELAY);
}
@SuppressLint ("InlinedApi")
private void show ()
{
// Show the system bar
mContentView.setSystemUiVisibility (View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
mVisible = true;
// Schedule a runnable to display UI elements after a delay
mHideHandler.removeCallbacks (mHidePart2Runnable);
mHideHandler.postDelayed (mShowPart2Runnable, UI_ANIMATION_DELAY);
}
/**
* Schedules a call to hide() in [delay] milliseconds, canceling any
* previously scheduled calls.
*/
private void delayedHide (int delayMillis)
{
mHideHandler.removeCallbacks (mHideRunnable);
mHideHandler.postDelayed (mHideRunnable, delayMillis);
}
}
全屏 Activity java代码结束
XML 布局包含插入的 android 绘图 View 部分
全屏 Activity 布局XML开始
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:ap="http://schemas.android.com/apk/res-auto"
android:background="#0099cc"
tools:context="com.efilabs.plotxynew.ActPlotNew0">
<!-- The primary full-screen view. This can be replaced with whatever view
is needed to present your content, e.g. VideoView, SurfaceView,
TextureView, etc. -->
<!--TextView
android:id="@+id/fullscreen_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:keepScreenOn="true"
android:text="@string/dummy_content"
android:textColor="#33b5e5"
android:textSize="50sp"
android:textStyle="bold"/-->
<com.androidplot.xy.XYPlot
style="@style/APDefacto.Light"
android:id="@+id/fullscreen_content"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
ap:title="A Simple XY Plot"
ap:rangeTitle="range"
ap:domainTitle="domain"
ap:lineLabels="left|bottom"
ap:lineLabelRotationBottom="-45"/>
<!-- This FrameLayout insets its children based on system windows using
android:fitsSystemWindows. -->
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<LinearLayout
android:id="@+id/fullscreen_content_controls"
style="?metaButtonBarStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom|center_horizontal"
android:background="@color/black_overlay"
android:orientation="horizontal"
tools:ignore="UselessParent">
<Button
android:id="@+id/dummy_button"
style="?metaButtonBarButtonStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/dummy_button"/>
</LinearLayout>
</FrameLayout>
</FrameLayout>
全屏 Activity 布局XML结束
为了不弄乱 Android 生成的 java 代码,我创建了第二个 java Activity 类,扩展了 Android 生成的 java Activity 代码,并将“简单的 XY 图”放入其中
扩展 Activity 代码开始
package com.efilabs.plotxynew;
import android.graphics.DashPathEffect;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import com.androidplot.util.PixelUtils;
import com.androidplot.xy.CatmullRomInterpolator;
import com.androidplot.xy.LineAndPointFormatter;
import com.androidplot.xy.SimpleXYSeries;
import com.androidplot.xy.XYGraphWidget;
import com.androidplot.xy.XYPlot;
import com.androidplot.xy.XYSeries;
import java.text.FieldPosition;
import java.text.Format;
import java.text.ParsePosition;
import java.util.Arrays;
public class ActPlotNew0a extends ActPlotNew0
{
private XYPlot plot;
@Override
protected void onCreate (Bundle savedInstanceState)
{
super.onCreate (savedInstanceState);
// setContentView (R.layout.act_plotnew0); // xxx provides full screen but swipe doesn't work anylonger
ActionBar bar = getSupportActionBar () ;
if (bar != null) bar.hide () ;
// initialize our XYPlot reference:
plot = (XYPlot) findViewById(R.id.fullscreen_content);
// create a couple arrays of y-values to plot:
final Number[] domainLabels = {1, 2, 3, 6, 7, 8, 9, 10, 13, 14};
Number[] series1Numbers = {1, 4, 2, 8, 4, 16, 8, 32, 16, 64};
Number[] series2Numbers = {5, 2, 10, 5, 20, 10, 40, 20, 80, 40};
// turn the above arrays into XYSeries':
// (Y_VALS_ONLY means use the element index as the x value)
XYSeries series1 = new SimpleXYSeries (
Arrays.asList(series1Numbers), SimpleXYSeries.ArrayFormat.Y_VALS_ONLY, "Series1");
XYSeries series2 = new SimpleXYSeries(
Arrays.asList(series2Numbers), SimpleXYSeries.ArrayFormat.Y_VALS_ONLY, "Series2");
// create formatters to use for drawing a series using LineAndPointRenderer
// and configure them from xml:
LineAndPointFormatter series1Format =
new LineAndPointFormatter(this, R.xml.line_point_formatter_with_labels);
LineAndPointFormatter series2Format =
new LineAndPointFormatter(this, R.xml.line_point_formatter_with_labels_2);
// add an "dash" effect to the series2 line:
series2Format.getLinePaint().setPathEffect(new DashPathEffect (new float[]
{
// always use DP when specifying pixel sizes, to keep things consistent across devices:
PixelUtils.dpToPix(20),
PixelUtils.dpToPix(15)
}, 0));
// (optional) add some smoothing to the lines:
// see: http://androidplot.com/smooth-curves-and-androidplot/
series1Format.setInterpolationParams(
new CatmullRomInterpolator.Params(10, CatmullRomInterpolator.Type.Centripetal));
series2Format.setInterpolationParams(
new CatmullRomInterpolator.Params(10, CatmullRomInterpolator.Type.Centripetal));
// add a new series' to the xyplot:
plot.addSeries(series1, series1Format);
plot.addSeries(series2, series2Format);
plot.getGraph().getLineLabelStyle(XYGraphWidget.Edge.BOTTOM).setFormat(new Format ()
{
@Override
public StringBuffer format(Object obj, StringBuffer toAppendTo, FieldPosition pos)
{
int i = Math.round(((Number) obj).floatValue());
return toAppendTo.append(domainLabels[i]);
}
@Override
public Object parseObject(String source, ParsePosition pos)
{
return null;
}
});
}
}
扩展 Activity 代码结束
有趣的是,取消注释包含“...//xxx ...”的第 28 行使全屏工作,但现在在隐藏/显示任务栏和按钮栏之间切换的滑动手势“不起作用工作了
我没有足够的经验来解决这个问题,需要一些认真的帮助
注意:上述场景适用于 Android plot 0.9.8,并且会提供一个全屏的 Android plot graph 部分填充到底部图例
最佳答案
问题的根本原因是在布局和绘制绘图后调用 setSystemUiVisibility(...)
。这在 0.9.8 中不是问题,因为 XYGraphWidget
会在每次绘制时手动重新计算它的尺寸。这是一项昂贵且(通常)不必要的操作,并且出于性能原因在以后的版本中被删除。
我知道这没有解决您的用例(这是一个有效的用例),但如果您摆脱 postDelayed 并将全屏调整代码移至 onCreate,那么全屏模式将正确显示。
我正在为 1.4.5 版本开发图形渲染逻辑的替代实现,希望在支持您的用例的同时避免性能问题。它不应该要求您更改任何代码。
与此同时,一个简单的解决方法是在 setSystemUiVisibility
之后立即执行以下操作:
plot.getGraph().setGridRect(null);
plot.redraw();
关于具有新的 android-full-screen Activity 的 androidplot 不填满屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44317147/
我正在运行 Play! 2.3 使用 Akka 的多线程应用程序。每个线程访问 MySQL 数据库并运行一些计算。每次我运行一组这样的任务时,应用程序的内存占用量都会增加,这主要是由于 JDBC4Pr
我是 JavaScript 新手,正在尝试实现选择排序来亲自接触数组(注意:我知道有一个内置的排序函数)。不过,我遇到了一些奇怪的行为。 这是我的代码: function selectionSort(
我正在使用 unsemantic grid创建我的布局。好吧,我有一个容器,其中有一个标签和一个输入文本。标签的宽度为 20% 然后 margin-rightof 1em 然后我想让容器中的其余空间由
看看这张取自 morsmachine.dk/go-scheduler 的著名图片 灰名单是 P 的本地运行队列。如果此队列变空,它们将被全局运行队列中的 go routines 填充。 问题是,谁来填
(帖子创建于 2016 年 10 月 5 日) 我注意到每次运行图像并删除它时,我的系统都不会恢复到原来的可用空间量。 我应用于容器的生命周期是: > docker build ... > docke
我有一个应用程序,它在启动时运行两个或三个完整的 GC。有很多堆空间,不需要运行任何 GC(minor 或 full)。然而,在 gc 日志中,我可以看到 permgen 被填满,然后立即运行完整
我正在尝试制作可视化 VStack 属性的 VStack 示例应用 但是我的 VStack 无法填满屏幕的宽度 我在互联网上尝试了很多解决方案(frame modifier、HStack with S
[已解决] 所以我在页面顶部有一个高度恒定的 div,我希望在它下面有一个 iFrame 来填充页面的其余部分。 Google Images 和 LinkedIn 做的事情非常相似 参见:http:/
我正在尝试使我的标题框与我的图像大小相同,同时又不失去 flex-slider 的响应能力,有什么建议吗? http://jsfiddle.net/bmBnF/10/ 疯狂的K 最佳答案 我通过将其设
我有一个元素是 的兄弟元素动态填充 hello 我想要 固定在屏幕底部直到动态 s 要求将其向下推到 View 下方。 我尝试了以下但无法获得我想要的结果。 该元素位
我是一名优秀的程序员,十分优秀!