代码之家  ›  专栏  ›  技术社区  ›  mdl11

来自自定义图像视图的Toast消息

  •  0
  • mdl11  · 技术社区  · 12 年前

    如何在扩展ImageView的类中显示toast消息。我想把它放在onDoubleTap方法中,这样它就会向用户显示一条消息,告诉用户刚刚双击了哪个像素。我有以下两个班:

    public class TouchImageView extends ImageView 
    {
      ....
       final GestureDetector mGestureDetector = new GestureDetector(new GestureDetector.SimpleOnGestureListener() 
        {
            @Override
            public boolean onDoubleTap(MotionEvent e) 
            {           
                Toast.makeText(getApplicationContext(), "Pixel",  Toast.LENGTH_SHORT).show();
    
                return true;
            }
            ...
       }
    
    public class DisplayMap extends Activity 
    {
      int width;
      int height;
      double imageSize;
    
      @Override
      public void onCreate(Bundle savedInstanceState) 
      {
        super.onCreate(savedInstanceState);
    
        TouchImageView img = new TouchImageView(getApplicationContext());
    
        Bitmap mapImage = BitmapFactory.decodeResource(getResources(), R.drawable.testimage);
        img.setImageBitmap(mapImage);
        img.setMaxZoom(4f);
        setContentView(img);
        ...
    }
    

    上面的代码不起作用,因为 ImageView的getApplicationContext()未定义。

    谢谢

    2 回复  |  直到 12 年前
        1
  •  0
  •   tolgap    12 年前

    有你的 TouchImageView 类的构造函数,该构造函数接受 Context 对象

    Context context;
    
    public TouchImageView(Context context) {
        super(context); //Thanks for this tip
        this.context = context;      
    }
    
    final GestureDetector mGestureDetector = new GestureDetector(new GestureDetector.SimpleOnGestureListener() 
    {
        @Override
        public boolean onDoubleTap(MotionEvent e) 
        {           
            Toast.makeText(context, "Pixel",  Toast.LENGTH_SHORT).show();
    
            return true;
        }
        ...
    }
    

    并在TouchImageView对象中发送您的Activity.this对象

        2
  •  0
  •   josh527    12 年前

    如果您正在对ImageView进行子类化,那么方法getContext()将被继承。用这个来展示你的吐司。

    Toast.makeText(getContext(), "Pixel", Toast.LENGTH_SHORT).show();
    

    为了澄清另一个答案,如果您正在对ImageView进行子类化,只需调用super(context);不要担心维护您自己的上下文实例。

    这个:

     Context context;
    
    public TouchImageView(Context context) {
        this.context = context;      
    }
    

    应为:

    Context context; // <-- remove this
    
    public TouchImageView(Context context) {
         super(context);
    }
    

    希望这能有所帮助。