在我的应用程序中,我需要处理移动和单击事件.
单击是一个ACTION_DOWN操作的序列,几个ACTION_MOVE操作和一个ACTION_UP操作.理论上,如果您获得ACTION_DOWN事件然后获得ACTION_UP事件 - 这意味着用户刚刚单击了您的视图.
但实际上,这个序列在某些设备上不起作用.在我的三星Galaxy Gio上,只需单击我的视图:ACTION_DOWN,几次ACTION_MOVE,然后ACTION_UP即可获得此类序列.即我使用ACTION_MOVE动作代码获得了一些无法预料的OnTouchEvent激活.我从未(或几乎从不)获得序列ACTION_DOWN - > ACTION_UP.
我也不能使用OnClickListener,因为它没有给出点击的位置.那么如何检测点击事件并将其与移动区分开来呢?
我有一个RadioGroup rg1
,我想获得所选单选按钮的值.
我知道我可以使用以下方法获取id
所选单选按钮:
if(rg1.getCheckedRadioButtonId()!=-1)
int id= rg1.getCheckedRadioButtonId()
Run Code Online (Sandbox Code Playgroud)
这给了我id,但我想要那个按钮的值.
我正在实现一个自定义TextView
,我想在触摸视图时执行一些操作.我认为该onTouchEvent
方法可以在不必使用的情况下为视图提供全方位的触摸setOnTouchListener
(我正在尝试在视图中而不是在活动中完成所有工作,因此它是可移植的),但是唯一注册的触摸事件是ACTION_DOWN
.如果我OnTouchListener
使用此设置活动,我会获得全部触摸事件,但onTouchEvent
不会.
任何人都知道为什么会这样,或者任何人都可以提供一个不涉及使用的解决方案setOnTouchListener
(这会阻止实现活动设置自己的监听器)?
任何人都可以向我解释为什么onTouchEvent
执行两次,我怎么能设置它只运行一次?我找不到解释.谢谢.
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
_iv = new ImageView(this);
_map = BitmapFactory.decodeResource(getResources(), R.drawable.image);
_iv.setImageBitmap(_map);
_iv.invalidate();
setContentView(_iv);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
double X = event.getX();
double Y = event.getY();
Toast.makeText(this, "X: " + X + " Y: " + Y, Toast.LENGTH_SHORT).show();
return super.onTouchEvent(event);
}
Run Code Online (Sandbox Code Playgroud) 我试图在phonegap上检测showKeyboard和hidekeyboard事件.为此,在deviceready事件中我放置了以下代码:
bindEvents: function() {
document.addEventListener('deviceready', this.onDeviceReady, false);
},
// deviceready Event Handler
//
// The scope of 'this' is the event. In order to call the 'receivedEvent'
// function, we must explicity call 'app.receivedEvent(...);'
onDeviceReady: function() {
document.addEventListener("menubutton",app.onMenuKeyPress,false);
document.addEventListener("backbutton",navigateBack,false);
document.addEventListener("hidekeyboard", onKeyboardHide, false);
document.addEventListener("showkeyboard", onKeyboardShow, false);
},
Run Code Online (Sandbox Code Playgroud)
这里后退按钮事件被解雇和罚款,但工作hidekeyboard
和showkeyboard
事件从未被触发.
为了检测它,我尝试使用window.onresize
在浏览器中工作的事件.以下是其代码:
window.onresize = function(){
var screenHeight = $(window).height();
alert(screenHeight);
var diff = screenInitialHeight - screenHeight;
var newHeight = screenInitialHeight-diff;
alert(newHeight);
$('#mainpage').height(newHeight);
$('#nav_container').height(newHeight);
}
Run Code Online (Sandbox Code Playgroud)
但是这段代码也没有在show或hide键盘上执行.此功能仅在首次应用时执行.开始了.我在某些地方看到,对于某些人来说这些事件正在发挥作用,所以我觉得我身边有一些问题,可能是在一些配置文件等等.所以下面是androidmanifest.xml代码:
<?xml version='1.0' encoding='utf-8'?> …
Run Code Online (Sandbox Code Playgroud) javascript-events android-softkeyboard android-event cordova cordova-3
我正在修改Android 4.0.3.r1的自定义导航栏,并希望发送"Home"和"Back"等关键事件.我的应用程序不是一个系统:
IWindowManager mWindowManager = IWindowManager.Stub.asInterface(
ServiceManager.getService(Context.WINDOW_SERVICE));
mWindowManager.injectKeyEvent( ev, false );
Run Code Online (Sandbox Code Playgroud)
它不起作用,因为我无法android.permission.INJECT_EVENTS
从系统应用程序中获取.我怎样才能做到这一点?
我创建了一个自定义视图,它使用虚拟TranslateAnimation来设置一些布局属性.我使用Interpolator计算高度,并将其应用于TranslateAnimation的applyTransformation()方法内的视图.
如果我从我的Activity中触发动画,这工作得很好.
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.i("test", "onCreate()");
view.expand(); // This method starts the animation
}
Run Code Online (Sandbox Code Playgroud)
当我尝试使用触摸事件做同样的事情时,没有任何反应.
@Override
// This method is touch handler of the View itself
public boolean onTouch(View v, MotionEvent event) {
Log.i("test", "onTouch()");
this.expand(); // onTouch is part of the view itself and calls expand() directly
return true;
}
Run Code Online (Sandbox Code Playgroud)
我的expand方法如下所示:
public void expand() {
Log.i("test", "Expand!");
TranslateAnimation anim = new TranslateAnimation(0, 0, 0, 0) {
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) …
Run Code Online (Sandbox Code Playgroud) 在侦听ActionBarSherlock中的关键事件时,为了在ICS前设备上显示溢出菜单,我正面临一个有趣的问题.看起来我无法区分简单的按键与用户长按菜单键以显示IME的情况.两个KeyEvent
实例完全相同,看起来像这样:
是否有一种直接的方法来区分这两个不同的事件?
我有一个视图需要处理onTouch手势和 onClick事件.实现这个目标的正确方法是什么?
我有一个onTouchListener
和一onClickListener
组视图.每当我触摸视图时,首先onTouch
触发事件,然后触发onClick
.但是,从onTouch
事件处理程序我必须返回true
或false
.返回true
意味着正在使用该事件,因此android事件系统将不再传播该事件.
因此,onClick
永远不会生成事件,至少在我的事件处理程序中onClick
返回时,我的侦听器永远不会被触发.另一方面,返回时没有选项,因为这会阻止侦听器接收为识别手势所必需的任何其他事件.解决这个问题的常用方法是什么?true
onTouch
false
onTouch
在Android中,您是否可以创建一个侦听器来捕获视图属性中的更改(相对于屏幕顶部的宽度/高度/边距/位置)?
我想在layout_marginTop ="10dp"更改为其他值时触发事件.
android-event ×10
android ×9
touch-event ×2
android-view ×1
cordova ×1
cordova-3 ×1
listener ×1