`
在下个路口
  • 浏览: 111421 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

仿360卫士首页以及实现帧动画

阅读更多
   先上效果图,这样才能知道是不是你想要的效果!
这是仿360卫士首页效果图
 



这是帧动画效果图:
  

  

  接着上代码:
    实现360首页就只有一个Activity,很方便就可以用到你自己的项目中。
   
  /**
 * 高仿360首页
 * 
 * @author Administrator
 * 
 */
public class MainActivity extends Activity {
	private ImageView ivOne;
	private ImageView ivTwo;
	private LinearLayout lastOneItem;

	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_imitate_main);
		initViews();
	}

	public void initViews(){
		ivOne = (ImageView) findViewById(R.id.iv_one);
		ivTwo = (ImageView) findViewById(R.id.iv_two);
		vpMain = (ViewPager) findViewById(R.id.vp_main);
		views = new ArrayList<View>();
		views.add(View.inflate(this,
				R.layout.activity_imitate_rootblock_main_first, null));
		views.add(View.inflate(this, R.layout.activity_imitate_main_second,
				null));
		lastOneItem=(LinearLayout)views.get(0).findViewById(R.id.last_oneItem);
		lastOneItem.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				Intent intent=new Intent();
				intent.setClass(MainActivity.this, AnimationTestActivity.class);
				startActivity(intent);
			}
		});
		MyAdapter adapter = new MyAdapter();
		MyListener listener = new MyListener();
		vpMain.setAdapter(adapter);
		vpMain.setOnPageChangeListener(listener);
	}

	public void next(View v) {
		flipit(ivOne, ivTwo);
		vpMain.setCurrentItem((vpMain.getCurrentItem() + 1) % views.size());

	}

	private Interpolator accelerator = new AccelerateInterpolator();
	private Interpolator decelerator = new DecelerateInterpolator();
	private ViewPager vpMain;
	private List<View> views;

	/**
	 * @param one
	 * @param two
	 */
	private void flipit(View one, View two) {
		final View visible;
		final View invisible;
		if (one.getVisibility() == View.GONE) {
			visible = two;
			invisible = one;

		} else {
			invisible = two;
			visible = one;

		}
		ObjectAnimator visToInvis = ObjectAnimator.ofFloat(visible,
				"rotationY", 0f, 90f);
		visToInvis.setDuration(500);
		visToInvis.setInterpolator(accelerator);
		final ObjectAnimator invisToVis = ObjectAnimator.ofFloat(invisible,
				"rotationY", -90f, 0f);
		invisToVis.setDuration(500);
		invisToVis.setInterpolator(decelerator);
		visToInvis.addListener(new AnimatorListenerAdapter() {
			@Override
			public void onAnimationEnd(Animator anim) {
				visible.setVisibility(View.GONE);
				invisToVis.start();
				invisible.setVisibility(View.VISIBLE);
			}
		});
		visToInvis.start();
	}

	class MyAdapter extends PagerAdapter {

		@Override
		public int getCount() {
			return views.size();
		}

		@Override
		public boolean isViewFromObject(View view, Object obj) {
			return view == obj;
		}

		@Override
		public void destroyItem(ViewGroup container, int position, Object object) {
			container.removeView(views.get(position));
		}

		@Override
		public Object instantiateItem(ViewGroup container, int position) {
			container.addView(views.get(position));
			return views.get(position);
		}

	} 

	class MyListener implements OnPageChangeListener {

		@Override
		public void onPageScrollStateChanged(int arg0) {
		}

		@Override
		public void onPageScrolled(int arg0, float arg1, int arg2) {
		}

		@Override
		public void onPageSelected(int arg0) {
			flipit(ivOne, ivTwo);
		}

	}

}

    代码主要分为四个模块,第一initViews()初始界面,在这里面用到了适配器以及pageListener,所以接下来我们应该实现这两个模块。继承PagerAdapter,实现OnPageChangeListener。最后是最重要的一个方法了,flipit()这个方法实现了界面滑动时候的动画。

   其实在这里主要是想说帧动画是怎么实现的,所以以上的360首页只是轻描淡写的带过了,只是因为正好我把两个实现放在了一个项目中,所以就一起发上来了,同时也得感谢网上相关的资源,这个界面很多都参照了网上,但是具体出处我已经找不到了。

以下就是实现帧动画的具体实现过程。
    android自带的动画有两种,tween和frame,这两者的概念就不介绍了。在这里实现的是frame。其实利用animation-list来实现帧动画是非常简单的。
  
 <?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
   android:id="@+id/screen_full"
   android:layout_width="fill_parent"  
   android:layout_height="fill_parent"  
   android:orientation="vertical">  
    <ImageView 
        	android:id="@+id/animationIV"  
            android:layout_width="200dp"  
            android:layout_height="300dp"  
            android:padding="5dp"  
            android:layout_gravity="center_horizontal"
            android:src="@drawable/animation1/>   
  </LinearLayout>  
    

     主界面布局很简单,就是一个ImageView,主要是设置src的那一句,animation1是一个动画xml,该布局文件放在drawable目录下,其具体内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<animation-list  
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:oneshot="false"> 
    <item android:drawable="@drawable/icon1" android:duration="150"></item>  
    <item android:drawable="@drawable/icon2" android:duration="150"></item>  
    <item android:drawable="@drawable/icon3" android:duration="150"></item>  
    <item android:drawable="@drawable/icon4" android:duration="150"></item>  
    <item android:drawable="@drawable/icon5" android:duration="150"></item>  
    <item android:drawable="@drawable/icon6" android:duration="150"></item>  
    <item android:drawable="@drawable/icon7" android:duration="150"></item>  
    <item android:drawable="@drawable/icon8" android:duration="150"></item>  
</animation-list>  

  根标签为animation-list,其中oneshot为true代表着只展示一遍,设置为false会不停的循环播放动画  ,不写默认false
    根标签下,通过item标签对动画中的每一个图片进行声明 
    android:duration 表示展示所用的该图片的时间长度
之后就是在Activity中设置了:
   关联好主界面后,得到屏幕宽度
requestWindowFeature(Window.FEATURE_NO_TITLE); 
WindowManager wm=(WindowManager) this.getSystemService(WINDOW_SERVICE); 
screenWidth=wm.getDefaultDisplay().getWidth();

给全屏设置监听:
fullScreen=(LinearLayout) findViewById(R.id.screen_full);
fullScreen.setOnTouchListener(touchListener);

触摸事件的具体实现:
OnTouchListener touchListener=new OnTouchListener() {
		@Override
		public boolean onTouch(View v, MotionEvent event) {
			if(event.getAction()==MotionEvent.ACTION_DOWN){
				float x=event.getX();
				if(x>screenWidth/2){
					animationIV.setImageResource(R.drawable.animation1);  
	                animationDrawable = (AnimationDrawable) animationIV.getDrawable();  
	                animationDrawable.start(); 
				}else{
					 animationIV.setImageResource(R.drawable.animation2);  
		             animationDrawable = (AnimationDrawable) animationIV.getDrawable();  
		             animationDrawable.start();  
				}
			}
			if(event.getAction()==MotionEvent.ACTION_UP){
				animationDrawable = (AnimationDrawable) animationIV.getDrawable();  
                animationDrawable.stop();  
			}
			return true;
		}
	};


当用户触摸屏幕的时候,启动帧动画,
animationIV.setImageResource(R.drawable.animation1);  
animationDrawable = (AnimationDrawable) 
animationIV.getDrawable();  
animationDrawable.start(); 

        这里我是判断触摸的位置,当触摸在屏幕右侧,即触摸点>屏幕宽度/2时,启动向前走的动画,触摸屏幕左侧,触摸点<屏幕宽度/2时,启动向后退的动画。其中后退动画animation2跟animation1一样,同为存放在drawable目录下,只不过把item倒着写了一遍,从icon8到icon1。当手指离开屏幕,停止动画。帧动画的停止与结束主要是通过AnimationDrawable对象的start()和stop()方法实现。就这样实现了按屏幕右侧向前走,按屏幕左侧向后退的功能。它的用处很多,在游戏里面实现人物的行走动画就是通过这种方式的,稍加改进做四个方向的判断,就可以实现游戏人物的移动动画了,每个方向原理都是一样的!
    下面是帧动画的素材图片
  
  • 大小: 66.9 KB
  • 大小: 67.9 KB
  • 大小: 86.5 KB
  • 大小: 86.1 KB
  • 大小: 98.9 KB
分享到:
评论

相关推荐

    安卓动画效果相关-仿360手机卫士扫描的圆形旋转框动画-自定义Drawable.zip

    这个压缩包"安卓动画效果相关-仿360手机卫士扫描的圆形旋转框动画-自定义Drawable.zip"显然是关于实现一个模仿360手机卫士的扫描动画,该动画通常表现为一个圆形边框持续旋转,给人一种正在处理数据或扫描系统的视觉...

    仿360星空锁屏

    为了实现仿360星空锁屏的功能,开发者需要深入理解Android的四大组件(Activity、Service、BroadcastReceiver和ContentProvider)以及相关的API。其中,Activity负责用户界面的展示,Service则用于在后台运行,如...

    C#仿360加速球

    6. **动画效果**:为了让加速球更加生动,我们可以添加动画效果,如球体的呼吸灯效果,这需要使用到C#的动画框架或手动实现帧动画。 7. **UI设计**:除了功能实现,UI设计也非常重要。一个简洁、直观的用户界面可以...

    360防丢卫士.rar

    在本项目中,"360防丢卫士.rar" 是一个包含有关如何使用CSS3技术来创建360防丢卫士首页动态效果的压缩文件。这个压缩包可能包含了HTML、CSS、JavaScript等文件,其中"高海龙 day04-360防丢卫士"可能是具体的课程或...

    QT 不规则悬浮球 仿360

    QT 不规则悬浮球 仿360是一款基于Qt框架的小型软件测试程序,旨在模仿360安全卫士中的悬浮小球功能。该程序的核心挑战在于实现不规则形状的绘制和交互逻辑,如悬浮球的拖动、鼠标离开后的自动隐藏以及在隐藏过程中的...

    android 模仿360UI

    Android提供了多种动画类型,如属性动画、帧动画等,开发者可以通过此项目学习如何实现这些动画效果。 6. **触摸反馈**:良好的触摸反馈能让用户知道他们的操作已被系统识别。通过学习项目中的触摸事件处理,开发者...

    wpf模仿360安全卫士界面源代码.rar

    综上所述,实现“wpf模仿360安全卫士界面源代码”项目,需要熟练掌握WPF的核心特性,包括XAML布局、控件、数据绑定、事件处理、动画和自定义控件。通过这种方式,开发者可以创建出功能丰富且视觉吸引人的应用程序,...

    Android 仿360恶意广告拦截扫描UI效果源码.rar

    "Android 仿360恶意广告拦截扫描UI效果源码"提供了一种实现类似360安全卫士广告扫描界面的示例,这种效果常见于安全软件或系统清理工具,用于模拟扫描设备的过程,提升用户体验和互动性。下面将详细介绍这个源码中...

    js仿360安全卫士弹窗特效代码

    本项目"js仿360安全卫士弹窗特效代码"就是这样一个示例,它通过JavaScript语言实现了类似360安全卫士的弹窗提示效果,为网页添加了类似的安全提示功能。 首先,我们需要了解JavaScript(JS)是Web开发中的重要脚本...

    360清理动画

    3. **帧动画**:如果小人的动作较为复杂,比如挥手、扫除等,可能需要用到帧动画。通过将一系列静态图像串联起来,形成连续的动态效果。 4. **动画组合**:将不同的动画效果(如位移、旋转、缩放)结合在一起,可以...

    仿360 浮动小插件效果.zip

    5. **定时器和动画**:实现小插件的动态效果,比如自动隐藏和显示、平滑移动等,需要用到定时器和动画帧控制。 6. **资源管理**:处理图片、音频等资源的加载和释放,优化内存使用。 7. **兼容性和稳定性**:确保...

    Android 仿360恶意广告拦截扫描UI效果源码.zip

    在Android开发中,为了提供更好的用户体验和保护用户隐私,开发者经常需要实现类似360安全卫士那样的恶意广告拦截功能。这个"Android 仿360恶意广告拦截扫描UI效果源码.zip"就是一个示例项目,它展示了如何构建一个...

    易语言仿360开机助手关闭特效源码

    在这个"易语言仿360开机助手关闭特效源码"中,我们可以看到是用易语言实现的一个功能模块,即模仿360安全卫士开机助手的关闭动画效果。 360开机助手是一款常见的系统优化工具,它可以帮助用户管理启动项,提高电脑...

    Android仿360恶意广告拦截扫描UI效果源码.zip

    Android提供了多种动画类型,如属性动画(Property Animation)、视图动画(View Animation)以及帧动画(Frame Animation)。在这个项目中,可能是通过属性动画来模拟扫描条的移动,以呈现出扫描过程。开发者需要...

    Android代码-仿360恶意广告拦截扫描UI效果源码.zip

    2. **动画(Animations)**:UI的扫描效果可能使用了Android的动画框架,包括属性动画(Property Animation)、帧动画(Frame Animation)或者视图动画(View Animation)。属性动画可以实现更灵活的动态效果,比如...

    仿360开机助手关闭特效源码-易语言

    该项目的开发者通过易语言实现了模拟360安全卫士开机助手退出时的动画特效,虽然这可能看起来只是一个小功能,但它背后所蕴含的编程技术却十分值得深入探究。 首先,要实现一个平滑且视觉上吸引人的退出特效,...

    Android高级应用源码-仿360扫描模块.zip

    在本压缩包“Android高级应用源码-仿360扫描模块.zip”中,我们可以深入研究一个基于Android平台的高级应用程序开发案例,该案例模仿了360安全卫士的条形码扫描功能。这个功能通常用于快速识别商品、获取价格信息、...

    桌面浮动图标弹出窗口360效果

    这可能涉及到帧动画、平滑过渡或者关键帧动画等技术,以确保窗口的打开和关闭看起来既自然又流畅。 6. **编程语言与库**:实现这样的效果可能需要用到Java、C#、Python等编程语言,以及如Qt、WinAPI、WPF(Windows ...

    Qt 360主界面动态按钮

    本项目"Qt 360主界面动态按钮"显然是利用Qt框架来实现了一种与360安全卫士相似的主界面,特别关注的是动态按钮的设计。动态按钮是一种具有视觉吸引力的交互元素,它可以增加用户的互动体验,通过动画效果吸引用户的...

    易语言-易语言仿360金山之类的加速球

    这需要编程实现动画帧更新,以及根据系统状态调整图标样式。 4. **事件响应**:当用户点击加速球时,应有相应的响应,例如弹出系统优化菜单。这涉及到事件处理函数的编写,如`窗口程序.消息处理子程序`。 5. **...

Global site tag (gtag.js) - Google Analytics