请看下面的代码。myView在framelayout的无法设置,大小也不行。这就是那个常用的爆炸模拟的animation,
我将
MyView myView = new MyView(Blast.this,x,y);
frame.addView(myView);
这两行代码放倒点击监听中去了。就无法讲myView的位置放到FrameLayout的点击处。请问这是哪里出了问题。谢谢。
放倒onCreate那里就没有问题。 public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
final FrameLayout frame = new FrameLayout(this);
setContentView(frame);
frame.setBackgroundResource(R.drawable.back);
bomb = MediaPlayer.create(this , R.raw.bomb);
//myView.setBackgroundResource(R.anim.blast);
frame.setOnTouchListener(new OnTouchListener()
{
@Override
public boolean onTouch(View source, MotionEvent event)
{
if (event.getAction() == MotionEvent.ACTION_DOWN )
{
float x = event.getX();
float y = event.getY();
MyView myView = new MyView(Blast.this,x,y);
frame.addView(myView);
myView.setLocation((int)y, (int)x);
ViewGroup.LayoutParams params = myView.getLayoutParams();
anim = (AnimationDrawable) myView.getBackground();
anim.stop();
anim.start();
bomb.start();
}
return false;
}
}); class MyView extends ImageView
{
public MyView(Context context,float x,float y)
{
super(context);
setBackgroundResource(R.anim.blast);
}
// 定义一个方法,该方法用于控制MyView的显示位置
public void setLocation(int top, int left)
{
this.setFrame(left, top, left + 40, top + 40);
}
}
我将
MyView myView = new MyView(Blast.this,x,y);
frame.addView(myView);
这两行代码放倒点击监听中去了。就无法讲myView的位置放到FrameLayout的点击处。请问这是哪里出了问题。谢谢。
放倒onCreate那里就没有问题。 public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
final FrameLayout frame = new FrameLayout(this);
setContentView(frame);
frame.setBackgroundResource(R.drawable.back);
bomb = MediaPlayer.create(this , R.raw.bomb);
//myView.setBackgroundResource(R.anim.blast);
frame.setOnTouchListener(new OnTouchListener()
{
@Override
public boolean onTouch(View source, MotionEvent event)
{
if (event.getAction() == MotionEvent.ACTION_DOWN )
{
float x = event.getX();
float y = event.getY();
MyView myView = new MyView(Blast.this,x,y);
frame.addView(myView);
myView.setLocation((int)y, (int)x);
ViewGroup.LayoutParams params = myView.getLayoutParams();
anim = (AnimationDrawable) myView.getBackground();
anim.stop();
anim.start();
bomb.start();
}
return false;
}
}); class MyView extends ImageView
{
public MyView(Context context,float x,float y)
{
super(context);
setBackgroundResource(R.anim.blast);
}
// 定义一个方法,该方法用于控制MyView的显示位置
public void setLocation(int top, int left)
{
this.setFrame(left, top, left + 40, top + 40);
}
}
解决方案 »
- 语音识别关于package manager的intent无法获取的bug
- 使用java实现预览zip文件,解压其中指定文件,
- Android上多个应用共用一个service
- android触摸屏问题
- 有没做移植开发的 能给找个串口测试的程序吗
- win7上设置Java_Home异常,SDk manager启动不了 find_java.exe -s' 不是内部或外部命令
- 基于微信的第三方App间通信问题
- android SQLITE 如何实现数据合并
- android开发版本选项选择问题
- DIY了一个ContentProvider,程序崩?
- 请问如何查xml布局文件的文档?
- WebView和ListView的交互使用,异步加载的问题
/**
* Assign a size and position to this view.
*
* This is called from layout.
*
* @param left Left position, relative to parent
* @param top Top position, relative to parent
* @param right Right position, relative to parent
* @param bottom Bottom position, relative to parent
* @return true if the new size and position are different than the
* previous ones
* {@hide}
*/是相对于parent的位置,所以你不能每次都用x,y,要求差值
你说xy要差值,我点击的地方不一样,自然就是差值了。
但是为什么不行呢?
/**
* Assign a size and position to this view.
*
* This is called from layout.
*
* @param left Left position, relative to parent
* @param top Top position, relative to parent
* @param right Right position, relative to parent
* @param bottom Bottom position, relative to parent
* @return true if the new size and position are different than the
* previous ones
* {@hide}
*/
能否告诉下我如何更改代码?谢谢
view把整个framelayout填满了