Java 无法从其他类更改Imageview的图像
我有一个main活动,其中大部分代码都是编写的。我的activity_main.xml中有一个imageview,我正在将其设置为Mainactivity中的默认图像 我的另一个文件“OnSwipeTouchListener”正在侦听滑动和双击事件,我编写了代码,在用户双击时更改imageview的图像,但我的代码不起作用,也没有给出任何错误。(我正在使用Layoutinflater对活动\ u主文件进行充气) 这是你的听众Java 无法从其他类更改Imageview的图像,java,android,imageview,android-imageview,layout-inflater,Java,Android,Imageview,Android Imageview,Layout Inflater,我有一个main活动,其中大部分代码都是编写的。我的activity_main.xml中有一个imageview,我正在将其设置为Mainactivity中的默认图像 我的另一个文件“OnSwipeTouchListener”正在侦听滑动和双击事件,我编写了代码,在用户双击时更改imageview的图像,但我的代码不起作用,也没有给出任何错误。(我正在使用Layoutinflater对活动\ u主文件进行充气) 这是你的听众 package com.backspace.memebook; 导入
package com.backspace.memebook;
导入android.content.Context;
导入android.view.GestureDetector;
导入android.view.GestureDetector.SimpleOnGestureListener;
导入android.view.LayoutInflater;
导入android.view.MotionEvent;
导入android.view.view;
导入android.view.view.OnTouchListener;
导入android.widget.ImageView;
公共类OnSwipeTouchListener扩展了MainActivity实现OnTouchListener{
私人最终手势检测器手势检测器;
公共环境ctx;
公共OnSwipeTouchListener(上下文ctx){
gestureDetector=新的gestureDetector(ctx,new GestureListener());
this.ctx=ctx;
}
@凌驾
公共布尔onTouch(视图v,运动事件){
返回gestureDetector.onTouchEvent(事件);
}
私有最终类GestureListener扩展了SimpleOnGestureListener{
专用静态最终整数滑动\u阈值=100;
专用静态最终整数滑动速度阈值=100;
@凌驾
公共布尔onDown(运动事件e){
返回true;
}
@凌驾
公共布尔onDoubleTap(运动事件e){
System.out.println(“双击”);
LayoutInflater mInflater=(LayoutInflater)ctx.getSystemService(Context.LAYOUT\u INFLATER\u SERVICE);
视图=mInflater.flate(R.layout.activity\u main,空);
ImageView isfuncy=(ImageView)view.findViewById(R.id.isfuncy);
isfuncy.setImageResource(R.drawable.funcy);
返回super.onDoubleTap(e);
}
}
}
您正在活动中不存在的视图中再次膨胀布局。在设置ContentView之后,应在onCreate内使用findViewById,并在onDoubleTap()内更改ImageView背景。在注释中写入时,需要在活动中放大视图。类似的东西应该可以用(未经测试)
您可能希望在GestureListener的构造函数中传递对ImageView的引用,而不是从OnSwipeTouchListener访问数据您需要在MainActivity中膨胀并存储对视图的引用。意思是:onCreate()存储可从GestureListener访问的视图。
在onCreate中使用findViewById
。也可以在onDoubleTab()中完成。@greenapps是的,但不是最佳做法,因为如果在onCreate中使用findViewById,则会执行一次,如果在onDoubleTap()中使用findViewById,则每次用户点击imageview时都会执行。
public class MainActivity extends Activity {
public ImageView iv = null;
public void onCreate(....) {
setContentView( ... );
iv = findViewById(....);
}
public class OnSwipeTouchListener extends MainActivity implements OnTouchListener {
//public ImageView iv from MainActivity
public OnSwipeTouchListener (Context ctx){
gestureDetector = new GestureDetector(ctx, new GestureListener());
}
private final class GestureListener extends SimpleOnGestureListener {
private static final int SWIPE_THRESHOLD = 100;
private static final int SWIPE_VELOCITY_THRESHOLD = 100;
@Override
public boolean onDoubleTap(MotionEvent e) {
iv.setImageResource(R.drawable.funny); //iv is accessable, you may also use a constructor to pass the reference.
return super.onDoubleTap(e);
}
}
}