android 里怎么实现一个图层,比如说我现在有个Activity,要在上面加一个标记。类似与Google map OverLay一样。 不知道大家有什么想法呢? 请大侠指教一下

解决方案 »

  1.   

      能详细点吗 ? 比如说我有N多呢 ?  你是说用Canvas 来画吗 ?在Activity里也没有这个Ondraw()方法 谢谢,可能我不是很理解你说的是什么 ,不知道你是什么思路。
      

  2.   

    不是画在activity里,应该有个显示的view,在那个view上画。或者用个新的window,实现方式很多
      

  3.   

    楼主在activity中可以使用dialog,或者popwindow都可以达到你要的效果
      

  4.   


      View 是XML中配出来的,不是动态写出来的。
      

  5.   

    简单实现一例: public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main); DisplayMetrics dm = new DisplayMetrics();
    this.getWindowManager().getDefaultDisplay().getMetrics(dm);
    width = dm.widthPixels;
    height = dm.heightPixels; iv = (ImageView) this.findViewById(R.id.iv);
    iv.setOnClickListener(new OnClickListener() { @Override
    public void onClick(View v) {
    int l = rand.nextInt(width);
    int t = rand.nextInt(height); int ivWidth = iv.getMeasuredWidth();
    int ivHeight = iv.getMeasuredHeight(); if (l > width - ivWidth) {
    l = width - ivWidth;
    } if (t > height - ivHeight - 50) {
    t = height - ivHeight - 50;
    } Log.v("btn l,t:", "" + l + "," + t);
    iv.layout(l, t, l + ivWidth, t + ivHeight);
    }
    });
    }布局:
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="@string/hello" />
        <ImageView
            android:id="@+id/iv"
            android:src="@drawable/icon"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </RelativeLayout>
      

  6.   


     比如说,我一个Activity里只有一个ImageView 是满屏的。我要在这个ImageView上加很多其他的ImageView  怎么办?
      

  7.   

    上面那个是布局里面写的,再来个动态生成的。
    这个是每次显示出来的,叠加上去的那个地标 class blashView extends ImageView
    {
    public blashView(Context context) 
    {
    super(context);
    }
    public void lay(int x , int y)
    {
    setFrame(x, y, x+40, y+40);
    }
    @Override
    protected void onDraw(Canvas canvas) {
    // TODO Auto-generated method stub
    Paint p=new Paint();
    p.setColor(Color.RED);
    canvas.drawRect(new Rect(0, 0, 10, 10),p );
    }

    }
    随便定义一个背景层: class MyView extends View
    {
    public MyView(Context context)
    {
    super(context);
    } @Override
    public void onDraw(Canvas canvas)
    {
                             ... ...
    }
    }这是activity:public class MoveBack extends Activity
    {
    blashView bv;
    AnimationDrawable amd;
    MyView mv;
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
    FrameLayout fl=new FrameLayout(this);
    super.onCreate(savedInstanceState);
    mv=new MyView(this);
    bv=new blashView(this);
    bv.setVisibility(View.INVISIBLE);
    fl.addView(mv);
    fl.addView(bv);
    setContentView(fl); fl.setOnTouchListener(new OnTouchListener() {

    @Override
    public boolean onTouch(View v, MotionEvent event) {
    float x=event.getX();
    float y=event.getY();
    if(event.getAction()==MotionEvent.ACTION_DOWN)
    {
    bv.lay((int)x, (int)y);
    }
    return false;
    }
    }); }
    }这里只有一个地标,每次点击的时候是移动过去的
    你可以每次new一个出来,再控制他消失
      

  8.   

    其实最究级的做法,是全部自己用ondraw绘上去然后自己处理点击消息,我毕业设计就是这么做的
    但是一般实现的话,用android的imageView就够了
      

  9.   


      你这个是类似于OverLay的吗 ? 谢谢你这么详细的回答
      

  10.   


    前面的2个都是类似overlay的
      

  11.   

    如果多张图片,你可以动态加载啊。不一定非要都在xml中写入。同时显示多张图片也有控件使用啊。其实上面的几位都说得对,最简单的方法就是用view,你可以把该view写入xml布局文件中,也可以在代码中自己使用。至于你说的那个OverLay,我知道你的意思,就是在一个图层上面显示图片,在mapview中,我弄过!你要的话,我可以给你。Q:984326013
      

  12.   


    哪里不对我自己用的都可以如果是做地图的话, 你首先要把他摆到那个地方去,然后个他添加onClickListener,然后响应了之后还要处理
      

  13.   


     你只是layout()方法给他重新定位而已,而且如果是全屏的话,标记的View会被覆盖掉,导致看不见 !!
      

  14.   

    用想对布局 绘制两个 View 然后控制View的显示与不显示。
      

  15.   

    其实最究级的做法,是全部自己用ondraw绘上去然后自己处理点击消息,我毕业设计就是这么做的
    但是一般实现的话,用android的imageView就够了
      

  16.   


    这个地方就需要你用 frameLayout 或者 relativeLayout 自己控制了,用代码new出来的东西,这个比较好解决如果用布局文件的话,要处理好先后关系和覆盖关系
      

  17.   

    我明白楼主的意思,我曾经纠结于这个问题,用FrameLayout可以实现图层的效果,它的子View,代码写在下面的在上面一层,如:我有一个ImageView代码在上面,一个TextView代码在下面,位置定义为重合的,那么程序一运行你会发现TextView在上层,ImageView在下层,据此,可以定义出层次复杂的布局出来。