android 里怎么实现一个图层,比如说我现在有个Activity,要在上面加一个标记 android 里怎么实现一个图层,比如说我现在有个Activity,要在上面加一个标记。类似与Google map OverLay一样。 不知道大家有什么想法呢? 请大侠指教一下 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 能详细点吗 ? 比如说我有N多呢 ? 你是说用Canvas 来画吗 ?在Activity里也没有这个Ondraw()方法 谢谢,可能我不是很理解你说的是什么 ,不知道你是什么思路。 不是画在activity里,应该有个显示的view,在那个view上画。或者用个新的window,实现方式很多 楼主在activity中可以使用dialog,或者popwindow都可以达到你要的效果 View 是XML中配出来的,不是动态写出来的。 简单实现一例: 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> 比如说,我一个Activity里只有一个ImageView 是满屏的。我要在这个ImageView上加很多其他的ImageView 怎么办? 上面那个是布局里面写的,再来个动态生成的。这个是每次显示出来的,叠加上去的那个地标 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一个出来,再控制他消失 其实最究级的做法,是全部自己用ondraw绘上去然后自己处理点击消息,我毕业设计就是这么做的但是一般实现的话,用android的imageView就够了 你这个是类似于OverLay的吗 ? 谢谢你这么详细的回答 前面的2个都是类似overlay的 如果多张图片,你可以动态加载啊。不一定非要都在xml中写入。同时显示多张图片也有控件使用啊。其实上面的几位都说得对,最简单的方法就是用view,你可以把该view写入xml布局文件中,也可以在代码中自己使用。至于你说的那个OverLay,我知道你的意思,就是在一个图层上面显示图片,在mapview中,我弄过!你要的话,我可以给你。Q:984326013 哪里不对我自己用的都可以如果是做地图的话, 你首先要把他摆到那个地方去,然后个他添加onClickListener,然后响应了之后还要处理 你只是layout()方法给他重新定位而已,而且如果是全屏的话,标记的View会被覆盖掉,导致看不见 !! 用想对布局 绘制两个 View 然后控制View的显示与不显示。 其实最究级的做法,是全部自己用ondraw绘上去然后自己处理点击消息,我毕业设计就是这么做的但是一般实现的话,用android的imageView就够了 这个地方就需要你用 frameLayout 或者 relativeLayout 自己控制了,用代码new出来的东西,这个比较好解决如果用布局文件的话,要处理好先后关系和覆盖关系 我明白楼主的意思,我曾经纠结于这个问题,用FrameLayout可以实现图层的效果,它的子View,代码写在下面的在上面一层,如:我有一个ImageView代码在上面,一个TextView代码在下面,位置定义为重合的,那么程序一运行你会发现TextView在上层,ImageView在下层,据此,可以定义出层次复杂的布局出来。 andoid调试 怎么挂载 android 文件名含特殊字符不能播放 android自定义通知的问题 初装android SDK 启动AVD 屏幕横屏,内容也是横的 android 环境问题 android socket通信调试时可用,发布到服务器出错 Android中如何截取手机当前屏幕(不是截取当前的Activity) 如何得知系统进入深度休眠或者从深度休眠中被唤醒? 哪句话是执行打开端口的代码? android 操作rtf文件 关于animation结束时,View OnClick触发位置的问题 关于android ndk jni的基础问题
View 是XML中配出来的,不是动态写出来的。
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>
比如说,我一个Activity里只有一个ImageView 是满屏的。我要在这个ImageView上加很多其他的ImageView 怎么办?
这个是每次显示出来的,叠加上去的那个地标 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一个出来,再控制他消失
但是一般实现的话,用android的imageView就够了
你这个是类似于OverLay的吗 ? 谢谢你这么详细的回答
前面的2个都是类似overlay的
哪里不对我自己用的都可以如果是做地图的话, 你首先要把他摆到那个地方去,然后个他添加onClickListener,然后响应了之后还要处理
你只是layout()方法给他重新定位而已,而且如果是全屏的话,标记的View会被覆盖掉,导致看不见 !!
但是一般实现的话,用android的imageView就够了
这个地方就需要你用 frameLayout 或者 relativeLayout 自己控制了,用代码new出来的东西,这个比较好解决如果用布局文件的话,要处理好先后关系和覆盖关系