怎么在android studio 中用viewflipper实现动画效果
效果看完了就来实现这个效果。 1/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <ViewFlipper android:id="@+id/ViewFlipper1" android:layout_width="fill_parent" android:layout_height="fill_parent"> </ViewFlipper> <LinearLayout android:orientation="horizontal" android:layout_width="wrap_content" android:layout_gravity="bottomcenter_horizontal" android:layout_height="wrap_content" > <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/da" android:id="@+id/imageview1" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/xiao" android:id="@+id/imageview2" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/xiao" android:id="@+id/imageview3" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/xiao" android:id="@+id/imageview4" /> </LinearLayout> </FrameLayout> 简单的介绍一下布局文件:最外层是一个FrameLayout,使用FrameLayout就是为了是的下面的四个点在ViewFlipper上面。LayoutLayout在FrameLayout的下面和水平居中。 2/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="45dp" android:text="进入程序" android:textColor="#3E3E3E" android:layout_gravity="center_horizontal" /> </LinearLayout> 在这个布局文件中有一个Button,用于跳转Activity用。 在Activity中声明一个GestureDetector对象,在onCreate方法中分配内存。 detector = new GestureDetector(this); 使用this为参数,那么就要使得activity类impllements OnGestureListener接口。重写几个方法。覆盖父类的onTouchEvent方法,在这个方法中如下写: @Override public boolean onTouchEvent(MotionEvent event) { // TODO Auto-generated method stub return this.detector.onTouchEvent(event); } 这样就使得detector能接受消息响应了。 在实现OnGestureListener的方法中判断用户的滑动来切换界面: @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { System.out.println("in------------>>>>>>>"); if (e1.getX() - e2.getX() > 120) { if (i < 3) { i++; setImage(i); this.flipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.animation_right_in)); this.flipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.animation_left_out)); this.flipper.showNext(); } return true; } else if (e1.getX() - e2.getX() < -120) { if (i > 0) { i--; setImage(i); this.flipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.animation_left_in)); this.flipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.animation_right_out)); this.flipper.showPrevious(); } return true; } return false; } void setImage(int i) { for(int j=0;j<4;j++) { if(j!=i) iamges[j].setImageResource(R.drawable.xiao); else iamges[j].setImageResource(R.drawable.da); } } 界面切换的时候改变下面的四个小ImageView的图片。切换的动画在res/anim文件夹中
setContentView怎么实现像activity切换时的动画效果
先用LayoutInflater把每个布局文件转换成View,再把view放到ViewFlipper中,用ViewFlipper控制切换的动画效果。 在Activity 的onCreate()方法中通常会调用setContentView来将一个布局传进去来显示界面,有的时候我们需要拿到这个View来动态的做一些界面处理,比如添加一个子View,这种情况下我们期望有一个与setContentView()对应方法getContentView()方法如下: 拿到这个View之后,就可以将返回的View强制转化成你所传入的布局文件中最外一层的View了。
如何解决控件的onTouch事件与onClick事件的冲突问题
在Android中,对一个View同时调用OnTouch事件和OnClick事件时,导致事件冲突,比如onClick事件打算执行A动作,OnTouch事件打算执行B动作,但是在实际使用时会发现,当调用OnTouch时,有可能会同时执行A,B两个动作,这是因为OnClick事件本身就是在OnTouch事件中发生的;在onTouch事件中,如果返回true,就不会执行onClick,返回false,就同时执行onClick方法,要想把OnTouch和onClick事件完全的区分。可能过下列方法,解决该冲突问题:
就是在 OnTouch中的MotionEvent.ACTION_DOWN 时,记录下点(X1,Y1),
在 MotionEvent.ACTION_UP 时,记录下点(X2,Y2),然后比对 俩点之间的距离,如果小于一个较小数值(比如5),就认为是Click事件,onTouch中返回false,如果距离较大,可以当作onTouch事件去处理,返回true:
示范如下:
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
x1 = event.getX();
y1 = event.getY();
}
if (event.getAction() == MotionEvent.ACTION_UP) {
x2 = event.getX();
y2 = event.getY();
if (Math.abs(x1 - x2) < 6) {
return false;// 距离较小,当作click事件来处理
}
if(Math.abs(x1 - x2) >60){ // 真正的onTouch事件
}
}
return true;// 返回true,不执行click事件
}
一个view怎么同时响应onTouch和onClick事件
想给ImageView同时添加ontouch和onclick事件,但是一直有冲突,在网上找了几个解决办法都没有成功,办法有:1、定义一个全局标记 booelan isMove, 对ontouch事件的中动作判断,在down中isMove = false ,在move动作中isMove = true;最后return isMove ,这样是说如果ontouch中只执行了down认为是onclick,这时返回false 就可以相应点击事件了,可是在真机上验证不是这样,ontouch中每次都会执行到move动作,所以总是return true,这样就无法响应点击事件了。2、分别记录下ontouch中down和up动作是的坐标点,在up中判断,如果距离过小就认为是点击事件returnfalse ,否则返回true,但是实际测试图标明明拖动了很远但是还会响应onclick事件。