【问题标题】:How do I affect another view's property when ImageView is pressed?按下 ImageView 时如何影响另一个视图的属性?
【发布时间】:2014-04-07 07:56:13
【问题描述】:
我在 LinearLayout 视图中有一个 ImageView。我想在按下 ImageView 时更改 LinearLayout 视图的颜色。
我知道当状态通过可绘制对象发生变化时我可以换出 ImageView 图像,但我似乎找不到影响布局中另一个视图的理想方法,而 isPressed 在这个特定的图像视图上为真。
最终,我试图创建一个底部的 ActionBar 并模拟常规的 ActionBar 高亮框(即,当您按下 ActionBar 中的菜单项时,您会得到高亮框)。现在我的 ImageView 是一个 LinearLayout,顶部和底部都有一个小的(8dp)填充。我可以用具有 50% 白色背景的图像替换 ImageView 中的图像,但如果我想保持图像设备密度独立,我不能这样做。相反,我希望按钮存在一个方形布局,我会根据需要更改颜色。
想法?
【问题讨论】:
标签:
java
android
android-imageview
【解决方案1】:
“我在 LinearLayout 视图中有一个 ImageView。我想在按下 ImageView 时更改 LinearLayout 视图的颜色。”
为此:
您将 XML 中的 ImageView 定义为可点击的 android:clickable="true"
您在 Activity onCreat() 中影响到此 ImageView 的 OnClickListener :
ImageView yourImage = (ImageView) findViewById(R.id.your_image);
yourImage.setClickable(true); // if you want to define it here
yourImage.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
findViewById(R.id.your_linear_layout).setBackgroundColor(your_color);
}
});
如果你想只在点击时改变颜色并在点击后恢复旧颜色,你可以实现 OnTouchListener :
yourImage.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(final View v, MotionEvent event) {
int action = event.getAction() & MotionEvent.ACTION_MASK;
if (action == MotionEvent.ACTION_DOWN) {
// when the click begins
findViewById(R.id.your_linear_layout).setBackgroundColor(your_click_color);
return true;
} else {
// when the click finishs
findViewById(R.id.your_linear_layout).setBackgroundColor(your_init_color);
return true;
}
return false;
}
});
希望我能帮上忙……