请看下面的代码。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);
}
}
解决方案 »
- Dex文件数据区数据读取问题,跪求大神指教
- (类型转换)时间SimpleDateFormat.format()返回值,转int型,大神指点
- EasyAndroid-我写的一个小框架,请提意见
- 请教
- jni 如何把byte*转换成jstring类型的???
- 用Sourcery G++ Lite for ARM EABI(windows版本的)如何编译Android JNI?
- 请教android 2.2里回车跟方向键中间那个键的区别
- 开发Android的大概流程是怎么样的呢?
- 如何在ListPreference中改变AlertDialog的文字大小?
- 有大神知道这种水平时间轴的效果是如何实现的么
- 请问如何查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填满了