按下时更改图像视图的源图像
我有一个带有大量图像按钮的滚动视图。我想在按下按钮时更改图像按钮的图像。事情是,我希望图像保持到另一个图像按钮被按下。这就是为什么我不能使用选择器。实现他的最佳做法是什么?按下时更改图像视图的源图像
问候
你想这样做。
ImageButton Demo_button = (ImageButton)findViewById(R.id.firstimage);
// when you click this demo button
Demo_button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Demo_button.setImageResource(R.drawable.secondimage);
}
}
试试这个。 (更新的设置集)
ImageButton Demo_button = (ImageButton)findViewById(R.id.firstimage);
ImageButton second_button = (ImageButton)findViewById(R.id.secondimage);
// when you click this demo button
Demo_button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Demo_button.setImageResource(R.drawable.secondimage);
second_button.setImageResource(R.drawable.firstimage);
}
}
second_button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Demo_button.setImageResource(R.drawable.firstimage);
second_button.setImageResource(R.drawable.secondimage);
}
}
我希望你想要那样 对吗?
不是。我正在寻找一个带有视图的滚动视图,其中,如果您选择一个视图,最后一个选定的视图将被取消选中。您的示例适用于2个按钮,并且选择是手动完成的。 – Gratzi 2010-11-18 07:46:26
如果在点击后保存选择,然后重新加载图像滚动画廊(或滚动菜单),然后重新加载并使用替换图像滚动到所选内容,则可能可以完成此操作。就我所知,内置的图库或菜单功能在加载和显示后都不能替换图像。
我正在考虑像创建一个自定义按钮,并使用一种方法(如onSelected,但选择另一个按钮时用false调用)来设置当前图像。 – Gratzi 2010-11-22 07:25:58
的OnTouchListener很多更好的是你必须做的:
myImageButton.setOnTouchListener(new OnTouchListener(){
public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction())
{
case MotionEvent.ACTION_DOWN :
myImageButton.setImageResource(R.drawable.image_when_pressed);
break;
case MotionEvent.ACTION_UP :
myImageButton.setImageResource(R.drawable.image_when_released);
break;
}
return false;
}
});
这比在'onClick()'中一个接一个地调用'image.setImageResource(R.drawable.image_when_pressed)'和'image.setImageResource(R.drawable.image_when_released)'要好。如果用户持有图片,资源将保持'image_when_pressed'直到他们释放按钮 – 2014-05-07 14:58:42
可以使用StateListDrawable
实现这一目标。此方法也适用于ImageButton
s。我更喜欢它设置额外的听众。
我还编一类的额外助手:http://alexanderwong.me/post/40799636705/android-change-background-image-drawable-on-press
public static StateListDrawable makeStateDrawable(Drawable drawable, Drawable pressedDrawable, Drawable disabledDrawable) {
boolean set = false;
StateListDrawable stateDrawable = new StateListDrawable();
if (disabledDrawable != null) {
set = true;
stateDrawable.addState(new int[] { -android.R.attr.state_enabled }, disabledDrawable);
}
if (pressedDrawable != null) {
set = true;
stateDrawable.addState(new int[] { android.R.attr.state_pressed }, pressedDrawable);
}
if (drawable != null) {
set = true;
stateDrawable.addState(new int[0], drawable);
}
return set ? stateDrawable : null;
}
别忘了创建字段“好玩”
试试这个改变image.When imageview的压
Like_btn.setOnClickListener(new OnClickListener()
{
**private boolean fun = true;**
public void onClick(View v)
{
if(fun)
{
Like_btn.setImageResource(R.drawable.unlike);
fun=false;
}
else
{
fun=true;
Like_btn.setImageResource(R.drawable.like);
Toast.makeText(getApplicationContext(), "Changed", Toast.LENGTH_LONG).show();
}
}
});
试试下面的代码: -
boolean flag=false;
ImageButton btn = (ImageButton)findViewById(R.id.btn);
// when you click this demo button
btn .setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if (!flag) {
btn.setBackgroundResource(R.drawable.imageonpress);
flag=true;
}
else {
btn.setBackgroundResource(R.drawable.image);
flag=false;
}
}
}
float alpha_first = 0.2f;
float alpha_second = 1.0f;
AlphaAnimation alphadp = new AlphaAnimation(alpha_second, alpha_first);
switch (v.getId()) {
case R.id.disable_deactivate_pic:
ImageButton disable_button =(ImageButton)findViewById(R.id.disable_deactivate_pic);
if (!flag) {
disable_button.setImageResource(R.drawable.enable_active);
linearLayout_for_picture = (LinearLayout) findViewById(R.id.linearlayout_imageView_pic);
alphadp.setFillAfter(true);
linearLayout_for_picture.startAnimation(alphadp);
flag=true;
}
else {
disable_button.setImageResource(R.drawable.disable_active);
alphadp.setFillAfter(false);
linearLayout_for_picture.startAnimation(alphadp);
flag=false;
}
break;
Demo_button.setImageResource(R.drawable.secondimage)
//Demo_button is your event holder (the button or imageview or bitmap file which contains the image) and secondimage is your image (drawable) file, without any complications.
该做的伎俩。
更好的解决方案使用下面的XML作为图像来源:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_activated="true">
<bitmap android:src="@drawable/image_selected"/>
</item>
<item>
<bitmap android:src="@drawable/image_not_selected"/>
</item>
</selector>
@Override
public void onClick(View v) {
v.setActivated(!v.isActivated());
}
另请参阅我的答案,它更短,不需要Java代码:https://stackoverflow.com/a/45239629/245966(和它也会在Android Studio中生成预览) – 2017-07-21 13:58:23
什么工作对我来说是:
我创建了一个新的可绘制的XML文件,例如,image_state。XML
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<bitmap android:src="@drawable/image_pressed"/>
</item>
<item>
<bitmap android:src="@drawable/image"/>
</item>
</selector>
而在我的布局文件,我设置的ImageView的src为:
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/image_state"/>
如果你有一个ImageView
或ImageButton
并希望改变这种形象的按下时,你可以刷新活动对于任何压制:
fav.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int isFavor = c.getInt(c.getColumnIndex("isFavor"));
if(isFavor == 1){
db.execSQL("update content set isFavor=0 where ID="+idxx+";");
fav.setImageResource(R.drawable.favnot_ic);
Toast.makeText(context.getApplicationContext(),"item cleaned",Toast.LENGTH_LONG).show();
activity.finish();
activity.overridePendingTransition(0, 0);
context.startActivity(activity.getIntent());
}
else{
db.execSQL("update content set isFavor=1 where ID=" + idxx + ";");
fav.setImageResource(R.drawable.fav_ic);
Toast.makeText(context.getApplicationContext(),"Item added...",Toast.LENGTH_LONG).show();
activity.finish();
activity.overridePendingTransition(0, 0);
context.startActivity(activity.getIntent());
}
}
});
这似乎是实现这一目标的最短途径,并且只需要XML,没有Java代码:
将文件保存为绘制/ image_pressable.xml旁边的两个图像:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/image_pressed" android:state_pressed="true" />
<item android:drawable="@drawable/image_regular" />
</selector>
然后引用它:
<ImageView android:src="@drawable/image_pressable" />
如果u在乌尔应用已经一个按钮,将做这两个图片之间的交换你有点击时,然后有一个简单的代码:D
//在Android中添加图片我们只是“从他们的位置复制他们d在过去(RES - >绘制) “
//然后拖放 ”ImageView的“,并选择ü要显示
// U可以调整刻度掷图像” scaleType,layout_Width & layout_Height “
public boolean swap = true;
public void change(View view)
{
ImageView i = (ImageView) findViewById(R.id.img);
if (swap)
{
i.setImageResource(R.drawable.images);
swap=false;
}
else
{
swap=true;
i.setImageResource(R.drawable.couple);
}
}
嗨PrashantAdesara。我知道这将工作(我将不得不设置为先前点击查看未选中的图像)。我以更自然的方式思考。就像创建自定义图像视图并在其中设置当前资源图像一样(例如在setSelected方法中)。问题是我需要一个视图方法,当视图被选中和未选中时被调用。希望这是明确的。 – Gratzi 2010-11-16 11:24:53