我目前正在摆弄Android编程,但我在检测不同的触摸事件时遇到一个小问题,即正常触摸按下(按下屏幕并立即释放),长按(触摸屏幕并按住手指) )和移动(在屏幕上拖动).
我想要做的是在屏幕上有一个图像(圆圈),我可以拖动它.然后,当我按一次(短/正常按下)时,Toast会提供一些关于它的基本信息.当我长按它时,会出现一个带有列表的AlertDialog来选择不同的图像(圆形,矩形或三角形).
我使用自己的OnTouchListener创建了一个自定义视图来检测事件并在onDraw中绘制图像.OnTouchListener.onTouch是这样的:
// has a touch press started?
private boolean touchStarted = false;
// co-ordinates of image
private int x, y;
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
if (action == MotionEvent.ACTION_DOWN) {
touchStarted = true;
}
else if (action == MotionEvent.ACTION_MOVE) {
// movement: cancel the touch press
touchStarted = false;
x = event.getX();
y = event.getY();
invalidate(); // request draw
}
else if (action == MotionEvent.ACTION_UP) {
if (touchStarted) {
// touch …Run Code Online (Sandbox Code Playgroud) 我正在将Xamarin与Visual Studio + James Montemagno的Media Plugin一起使用。
我使用它来访问本机设备库,使用PickVideoAsync()选择/拾取视频。
var file = await CrossMedia.Current.PickVideoAsync();
Run Code Online (Sandbox Code Playgroud)
我想获取我选择的视频(var file)的完整路径。
但是,生成的文件似乎是实际文件的临时(和压缩)版本。因此,此文件引用的路径不是原始文件路径。
我的结果:
file.Path: /var/mobile/Containers/Data/Application/9436142C-F8A1-43BF-ADE9-AD2DD676FC65/Documents/temp/trim.33800B19-DCDE-4629-896F-B34F5CDFB768.MOV
file.AlbumPath: assets-library://asset/asset.mov?id=8938D860-B84F-4878-9EA2-E91CBF9E9157&ext=mov
Run Code Online (Sandbox Code Playgroud)
file.Path =临时文件路径
file.AlbumPath=似乎是唯一引用文件的“路径”,无论对图库进行了什么更改。可悲的是,此文件似乎是URI / URL。
如何获取实际路径,或者至少获取实际文件名?
提示: 据我所记得,它var file来自类似的类型Media.Plugin.Abstractions.MediaFile,因此它不是实际的.NET类型
我遇到了一个错误,主要出现在三星设备上。我用媒体录像机录制了一段视频(代码如下所示)。它在所有设备上都能完美运行,但现在在某些 Android 设备上,音频和视频轨道是分开的。
假设我正在捕获 5 秒的视频。视频时长 5 秒,播放视频将播放视频的第一帧和 5 秒的音频。之后,正在播放 5 秒的视频。默认视频播放器显示视频在 5 秒后结束,但实际上它只是音频...
8.0 Oreo 中是否有新引入的内容,以便我必须调整我的 MediaRecorder?
我的媒体记录器设置:
private void SetUpMediaRecorder()
{
MediaRecorder.SetAudioSource(AudioSource.Mic);
MediaRecorder.SetVideoSource(VideoSource.Surface);
MediaRecorder.SetOutputFormat(OutputFormat.Mpeg4);
MediaRecorder.SetVideoEncoder(VideoEncoder.H264);
MediaRecorder.SetAudioEncoder(AudioEncoder.Aac);
MediaRecorder.SetOutputFile(outputURL);
MediaRecorder.SetVideoSize(1280, 720);
MediaRecorder.SetVideoFrameRate(30);
MediaRecorder.SetVideoEncodingBitRate(2000000);
MediaRecorder.SetMaxDuration(VideoManager.MAX_VIDEODURATION_MS);
//Set audio bitrate
int bitDepth = 16;
int sampleRate = 44100;
int bitRate = sampleRate * bitDepth;
MediaRecorder.SetAudioEncodingBitRate(bitRate);
MediaRecorder.SetAudioSamplingRate(sampleRate);
int rotation = (int)ThisActivity.WindowManager.DefaultDisplay.Rotation;
int orientation = orientations[rotation];
MediaRecorder.SetOrientationHint(orientation);
MediaRecorder.Prepare();
}
Run Code Online (Sandbox Code Playgroud)
编辑:我正在使用 Camera2 API
EDIT2:这似乎是某些三星设备的问题。深度睡眠会导致第一帧的呈现时间戳太长。将时间戳设置为 1/30 秒(如果您的视频是以 30fps 捕获的)将解决此问题。这是一个相应的错误线程:https : //github.com/googlesamples/android-Camera2Video/issues/24
我正在实例化一个GO,它有一个面板组件(RectTransform)作为场景中存在的画布的子代:
_heroSelectUI = (GameObject)Instantiate (_heroSelectUIPrefab, GameObject.Find ("Canvas").GetComponent<Transform>());
Run Code Online (Sandbox Code Playgroud)
创建它时,它获得以下值:
"左","上","右"和"下"得到一些不需要的值(可能是由于现有的画布似乎具有相同的值).
面板预制值为0,如何在实例化后将它们设置为0?我找不到RectTransform的正确变量.
我正在创建 "英雄选择菜单" 时创建按钮.这些按钮将根据它们代表的"英雄" 获得相关的图像/精灵.
我有以下方法,但我不明白我要将sprite应用到哪个变量.
Button _thisButton;
Sprite _normalSprite;
Sprite _highlightSprite;
protected override void DoStateTransition (SelectionState state, bool instant){
switch (state) {
case Selectable.SelectionState.Normal:
_thisButton.image = _normalSprite; //.image is not correct
Debug.Log("statenormalasd");
break;
case Selectable.SelectionState.Highlighted:
_thisButton.image = _normalSprite; //.image is not correct
//...
}
Run Code Online (Sandbox Code Playgroud)
状态肯定是有效的,我通过Debug.Log(...)确认了它;
问题是:如果不是.image,必须更改哪个值?
在此先感谢,Csharpest