精华内容
下载资源
问答
  • 初学Silverlight和balder,使用Silverlight4和balder 0.8.8.9建立项目, 试用coordinateAnimation创建一个方块位移的简单动画。 代码如下: ``` namespace _3Dani { public partial class MainPage : User...
  • 武器换手相关  换手的三种方式 1.缩放隐藏换手 2.link链接约束换手 3.prop骨骼换手 1.缩放隐藏换手 即 在...缺点为略麻烦,做动画之前就要想好武器需复制几份分别在哪,动画缩放容易出现中间帧过度不顺畅。

    武器换手相关

      换手的三种方式 1.缩放隐藏换手  2.link链接约束换手  3.prop骨骼换手

    1.缩放隐藏换手 即 在需要有武器的位置都放置一把武器(如左手、右手、后背、空中),将当前不需要显示的武器缩放至极小不可见,需要显示时再放大显示。优点为无需特别支持,引擎通用,非常简单。缺点为略麻烦,做动画之前就要想好武器需复制几份分别在哪,动画缩放容易出现中间帧过度不顺畅。

    2.link链接约束换手 即 使用link约束动画实现武器换手 其最大优点就是大部分动画师非常熟悉,运用起来得心应手。缺点也很明显,引擎不能识别link动画,需要塌陷或导出时烘焙动画才可被引擎识别,而一旦出现万向轴问题,改起来会比较麻烦。




    3. prop骨骼换手 即max自带的武器道具骨骼 优点是设定即为武器道具骨骼,能解决武器所需一切需求,并且被unity3D 5.0以后的版本支持,直接导出即可。缺点是unity3D 5.0之前的版本不支持,需要烘焙动画。




    表情动画相关

    Unity支持的MAX表情动画已经确认可行的有两种 一种就是 面部骨骼绑定表情动画 另一种是morpher控制器表情动画。表情动画常见于舞蹈类、大型MMO类及单机类等游戏中,前两种重视社交和展示所以对表情有需求,后一种常见于精品游戏中,各方面品质相对都比较高所以对表情也有要求。

    面部骨骼绑定动画 最常见的面部骨骼就是张嘴动画,只需一根下颚骨骼即可解决,在很多有坐骑或怪兽的项目中使用,是广义上的表情动画。较为复杂的表情动画用骨骼绑定来做并不划算,一来架设骨骼比较麻烦,具体K动画的时候也相对繁琐(有人用线性IK来制作表情,其实道理与骨骼绑定并无二致,只是调动画的时候有联动关系相对简单些);二是骨骼过多带来的运算量也比较大,会比较占用资源。



    morpher控制器表情动画 优点是占用资源相对较小,动画可以做到比较精细,制作流程也相对简单。缺点是动画师不一定会调模型表情,前期过程相对麻烦(被拾取的表情头不能镜像、不能在统一个被拾取脸上左右同时调表情),并且有比较多的动作师从来没接触过morpher学习成本也相对较高。

      这里解释下morpher的原理 将一个角色的面部模型复制出多份,每份分别承担表情的一个局部动作,如微笑至少需要左嘴角上翘、右嘴角上翘、左眼微闭、右眼微闭四份。然后通过morpher控制器拾取这些表情,即可通过控制morpher的数值来调节表情动画。




     (PHP开发、web前端、UI设计、 VR开发专业培训机构-v客IT学院版权所有,转载请注明出处,谢谢合作!) 

    展开全文
  • 项目中用到了抽屉视图,抽屉视图 推出新视图控制器的时候需要使用... 的时候就会出现问题。因为返回的时候 直接返回到了底层控制器,而且不完全是底层控制器。就像A-->B--C,我们在 C上面 dismiss 的时候, 直接 d

    项目中用到了抽屉视图,抽屉视图 推出新视图控制器的时候需要使用presentingViewController,新推出来的视图相对独立,有自己的一套内容,现在问题来了,再 这个新视图上 再 presentingViewController 的时候就会出现问题。因为返回的时候 直接返回到了底层控制器,而且不完全是底层控制器。就像A-->B--C,我们在 C上面 dismiss 的时候, 直接 dismiss 到了 A,而且  b 不是 被dismiss  掉的 ,而是 直接remove 掉了,由于我用的是  抽屉视图,这样一来,从 C返回 的时候 直接界面无法交互了。因为 我的B的view 被remove掉,而这不是我正常的移除方式。

    经过查阅苹果官方文档,我了解到,跟push 方式不一样的是,present 推出视图控制器的方式其实是把推出的视图放进了同一个栈,当栈中某个视图控制器执行dismiss的时候,栈中所有在它之上的视图控制器都会被dismiss,不同的是,栈顶的视图控制器将会以动画方式被dismiss,而中间的视图控制器只是简单的remove掉。

    我以为发现这个问题就够了,但是没想到后面的问题远远复杂的多,我后来发现无论是用Storyboard 创建的  presentViewController 还是纯代码创建的,都没有出现我上一段说的那种情况。也就是说我直接找错了方向。

    我这个问题可以说是二级presentViewController的时候出现的问题,然后我就把源头指向了自定义的动画类。这个类看似简单。其实涉及到的东西很多,为了证明是这个 自定义动画类出现的问题,我 首先把 使用自定义专场动画的那两句代码给注释了。使用系统默认的效果运行,果真就没有了问题,然后我开始研究那个自定义的动画类,这个类官方文档上说,必须使用一个容器View来执行动画,这个容器view 已经有,但是又多了一些其他的东西。我索性把 那些没必要的辅助性的view一并删除,然后运行,果真二级 present 就没有问题了,但是我使用 的 presentMoviePlayerViewControllerAnimated 这个方法使用了 系统的播放器VC,而这个vc在播放完毕的时候会自动dismiss,不知道是什么原因,这个播放器vc在dismiss 的时候总是会执行我那个自定义的dismiss 动画,但是出现的时候却不执行present动画,让我好生郁闷。为了解决这个问题,我判断了一下 dismissedvc  是否是 MoviePlayerViewController  类,如果是就返回dismiss 风格动画为nil,这样就解决了这个问题。目前先说这么多,以后再出现类似的问题,就知道从何下手了。

    展开全文
  • 项目要实现一个类似视频播放器控制界面的效果,不过比他简单些,显示有三个部分组成:最上面进行时间和下面的两个控制按钮,点击后屏幕显示,过几秒自动消失。 首先想到的就是前几天刚看的MediaController,所以就...

    需求:

    项目要实现一个类似视频播放器控制界面的效果,不过比他简单些,显示有三个部分组成:最上面进行时间和下面的两个控制按钮,点击后屏幕显示,过几秒自动消失。

    首先想到的就是前几天刚看的MediaController,所以就把MediaController拿过来简单的看了下,想貌似没有它复杂,赶进度要紧,自己简单实现就好,最后效果如下:



    实现思路:

    自定义一个view,上面是一个显示时间的文本,设下透明度;下面用一个FrameLayout,先放纵向放两个线性布局在最底层实现下面白条效果,然后把两个文本按钮加在上层;最后在稍微加点进入和退出的动画效果(这个地方出了点粗心的问题,下面提到)。


    实现:

    首先是自定义view:

    public class VideoControlPanel extends FrameLayout implements IVideoControlPanel, AnimationListener, OnTouchListener,
    		Runnable {
    	private static final int DELAYMILLIS = 3 * 1000;
    	private static final int DURATION = 300;
    
    	private boolean isShowing = false;
    
    	private Animation topEnter, topExit, buttomEnter, buttomExit;
    
    	private View mRoot;
    	private TextView tvTitle;
    	private LinearLayout llTitle, llChange, llHangup;
    	private FrameLayout flOperate;
    
    	private Handler handler = new Handler();
    
    	public VideoControlPanel(Context context) {
    		super(context);
    		initControllerPanel();
    	}
    
    	public VideoControlPanel(Context context, AttributeSet attrs) {
    		super(context, attrs);
    		initControllerPanel();
    	}
    
    	private void initControllerPanel() {
    		initOther();
    		initView();
    	}
    
    	private void initView() {
    
    		LayoutInflater inflate = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    		mRoot = inflate.inflate(R.layout.media_controller, null);
    
    		llTitle = (LinearLayout) mRoot.findViewById(R.id.llTitle);
    		flOperate = (FrameLayout) mRoot.findViewById(R.id.flOperate);
    
    		tvTitle = (TextView) mRoot.findViewById(R.id.tvTitle);
    		llHangup = (LinearLayout) mRoot.findViewById(R.id.llHangup);
    		llChange = (LinearLayout) mRoot.findViewById(R.id.llChange);
    
    		setOnTouchListener(this);
    
    		addView(mRoot);
    
    		show();
    	}
    
    	private void initOther() {
    		topEnter = new TranslateAnimation(0, 0, -100, 0);
    		topEnter.setDuration(DURATION);
    
    		topExit = new TranslateAnimation(0, 0, 0, -100);
    		topExit.setDuration(DURATION);
    		topExit.setAnimationListener(this);
    
    		buttomEnter = new TranslateAnimation(0, 0, 300, 0);
    		buttomEnter.setDuration(DURATION);
    
    		buttomExit = new TranslateAnimation(0, 0, 0, 100);
    		buttomExit.setDuration(DURATION);
    	}
    
    	@Override
    	public void onAnimationStart(Animation animation) {
    
    	}
    
    	@Override
    	public void onAnimationEnd(Animation animation) {
    		if (mRoot != null) {
    			mRoot.setVisibility(View.GONE);
    		}
    	}
    
    	@Override
    	public void onAnimationRepeat(Animation animation) {
    
    	}
    
    	@Override
    	public void hide() {
    		isShowing = false;
    		llTitle.startAnimation(topExit);
    		flOperate.startAnimation(buttomExit);
    	}
    
    	@Override
    	public void show() {
    		if (!isShowing) {
    			mRoot.setVisibility(View.VISIBLE);
    			isShowing = true;
    
    			llTitle.startAnimation(topEnter);
    
    			flOperate.setAnimation(buttomEnter);
    		}
    		handler.removeCallbacks(this);
    		handler.postDelayed(this, DELAYMILLIS);
    	}
    
    	@Override
    	public void run() {
    		hide();
    	}
    
    	@Override
    	public void setTitle(String title) {
    		if (tvTitle != null) {
    			tvTitle.setText(title);
    		}
    	}
    
    	@Override
    	public View getHangupView() {
    		return llHangup;
    	}
    
    	@Override
    	public View getChangeView() {
    		return llChange;
    	}
    
    	@Override
    	public void setOnClickListener(OnClickListener listener) {
    		// super.setOnClickListener(l);
    		if (llHangup != null) {
    			llHangup.setOnClickListener(listener);
    		}
    		if (llChange != null) {
    			llChange.setOnClickListener(listener);
    		}
    	}
    
    	@Override
    	public boolean onTouch(View v, MotionEvent event) {
    		show();
    		return false;
    	}
    }
    
    interface IVideoControlPanel {
    
    	/**
    	 * 隐藏操作面板
    	 */
    	public void hide();
    
    	/**
    	 * 显示操作面板
    	 */
    	public void show();
    
    	/**
    	 * 设置标题
    	 * 
    	 * @param title
    	 */
    	public void setTitle(String title);
    
    	/**
    	 * 获取挂断的View
    	 * 
    	 * @return
    	 */
    	public View getHangupView();
    
    	/**
    	 * 获取切换的View
    	 * 
    	 * @return
    	 */
    	public View getChangeView();
    }
    代码比较简单,所以也就没写注释。先加载xml中定义的布局,然后处理touch事件,最后用一个handle处理界面的消失。下面是布局文件:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
    
        <LinearLayout
            android:id="@+id/llTitle"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:background="#88FFFFFF"
            android:gravity="center"
            android:orientation="horizontal"
            android:padding="8dip" >
    
            <TextView
                android:id="@+id/tvTitle"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center_horizontal"
                android:text="通话时间:15分27秒"
                android:textSize="14sp" />
        </LinearLayout>
    
        <FrameLayout
            android:id="@+id/flOperate"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:orientation="horizontal" >
    
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical" >
    
                <ImageView
                    android:layout_width="match_parent"
                    android:layout_height="40dp"
                    android:src="#00FFFFFF" />
    
                <ImageView
                    android:layout_width="match_parent"
                    android:layout_height="40dp"
                    android:src="#88FFFFFF" />
            </LinearLayout>
    
            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="12dp" >
    
                <LinearLayout
                    android:id="@+id/llHangup"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentLeft="true"
                    android:layout_marginLeft="42dp"
                    android:orientation="vertical" >
    
                    <TextView
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:drawablePadding="4dp"
                        android:drawableTop="@drawable/ic_hangup"
                        android:gravity="center"
                        android:text="挂断" />
                </LinearLayout>
    
                <LinearLayout
                    android:id="@+id/llChange"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentRight="true"
                    android:layout_marginRight="42dp"
                    android:orientation="vertical" >
    
                    <TextView
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:drawablePadding="4dp"
                        android:drawableTop="@drawable/ic_change"
                        android:gravity="center"
                        android:text="切换" />
                </LinearLayout>
            </RelativeLayout>
        </FrameLayout>
    
    </RelativeLayout>
    这个布局的实现思路如上所述。然后就可以使用了,在需要的地方做如下引用:
    <com.ttdevs.customcontrolpanel.VideoControlPanel
            android:id="@+id/vcpPanel"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_alignParentTop="true"
            android:background="@drawable/bg" />
    这样就完成了所需效果。

    遇到的问题:

    在弄动画的时候,出了点问题,折腾了好久,现象为:底部的按钮出现的动画只有程序第一次启动的时候有效,之后就再没效果了。由于对动画不熟悉,也不知道怪什么,开始是像上面那么写的,最后实在没办法做如下修改,即每次都创建buttomEnter,竟然解决问题了:

    	@Override
    	public void show() {
    		if (!isShowing) {
    			mRoot.setVisibility(View.VISIBLE);
    			isShowing = true;
    
    			llTitle.startAnimation(topEnter);
    
    			buttomEnter = new TranslateAnimation(0, 0, 300, 0);
    			buttomEnter.setDuration(DURATION);
    			flOperate.setAnimation(buttomEnter);
    		}
    		handler.removeCallbacks(this);
    		handler.postDelayed(this, DELAYMILLIS);
    	}

    虽然效果实现了,但是一直纠结这个动画问题出在哪里。今天整理的时候无意中发现竟然是自己调用有问题导致的:

    flOperate.setAnimation(buttomEnter);应该改成:flOperate.startAnimation(buttomEnter);

    这样问题就解决了。


    最新修改:2013-12-09

    上面的问题虽然坚决了,却不知道问题出在哪,为什么解决,今天无意中看到一篇文章(来自:wangjinyu501),又拿过来研究了下,

    public voidsetAnimation(Animationanimation)

    Added inAPI level 1

    Sets the next animation to play for this view. If you want the animation to play immediately, usestartAnimation(android.view.animation.Animation)instead. This method provides allows fine-grained control over the start time and invalidation, but you must make sure that 1) the animation has a start time set, and 2) the view's parent (which controls animations on its children) will be invalidated when the animation is supposed to start.

    Parameters
    animation The next animation, or null.
    其中提到,想立即启动动画可以使用startAnimation(Animation)。setAnimation允许细粒度的控制(动画的)启动时间和失效,但是这样必须满足两个条件1)设置了动画启动时间,2)执行动画的组件的父视图在动画启动之前需要刷新界面(从wangjinyu501引用来的)。分析下,第一次动画出问题应该是没有设置动画的启动时间,因此在setAnimation()之前加上:

    buttomEnter.setStartTime(Animation.START_ON_FIRST_FRAME);
    这样即可。那为什么每次都创建就可以播放动画呢,有兴趣可以看看setStartTime的源码或者打印下buttomEnter.hasStarted()的值。


    去掉了布局文件后代码:

    public class VideoControlPanel extends FrameLayout implements IVideoControlPanel, AnimationListener, OnTouchListener,
    		Runnable {
    	private static final int DELAYMILLIS = 3 * 1000; // 显示延时
    	private static final int DURATION = 300; // 动画持续
    
    	private boolean isShowing = false;
    
    	private Animation topEnter, topExit, buttomEnter, buttomExit;
    	private View mRoot;
    	private TextView tvTitle;
    	private RelativeLayout rlParent, rlOperate;
    	private LinearLayout llTitle, llChange, llHangup, llOperateBg;
    	private FrameLayout flOperate;
    
    	private Handler handler = new Handler();
    
    	public VideoControlPanel(Context context) {
    		super(context);
    		initControllerPanel();
    	}
    
    	public VideoControlPanel(Context context, AttributeSet attrs) {
    		super(context, attrs);
    		initControllerPanel();
    	}
    
    	private void initControllerPanel() {
    		initOther();
    		initView();
    	}
    
    	private void initView() {
    		mRoot = initCustomView();
    
    		setOnTouchListener(this);
    
    		addView(mRoot);
    
    		show();
    	}
    
    	private View initCustomView() {
    		rlParent = new RelativeLayout(getContext());
    		rlParent.setLayoutParams(new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
    
    		// 上部分
    		llTitle = new LinearLayout(getContext());
    		llTitle.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, 60));
    		llTitle.setOrientation(LinearLayout.VERTICAL);
    		llTitle.setBackgroundColor(Color.parseColor("#90FFFFFF")); // TODO
    		llTitle.setGravity(Gravity.CENTER);
    		tvTitle = new TextView(getContext());
    		tvTitle.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
    		tvTitle.setGravity(Gravity.CENTER);
    		tvTitle.setTextSize(18);
    		llTitle.addView(tvTitle);
    
    		RelativeLayout.LayoutParams rlpTop = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT,
    				RelativeLayout.LayoutParams.WRAP_CONTENT);
    		rlpTop.addRule(RelativeLayout.ALIGN_PARENT_TOP);
    		rlParent.addView(llTitle, rlpTop);
    
    		// 下部分
    		flOperate = new FrameLayout(getContext());
    		flOperate.setLayoutParams(new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT,
    				FrameLayout.LayoutParams.WRAP_CONTENT));
    
    		// 下部分背景
    		llOperateBg = new LinearLayout(getContext());
    		llOperateBg.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
    				LinearLayout.LayoutParams.WRAP_CONTENT));
    		llOperateBg.setOrientation(LinearLayout.VERTICAL);
    		addBackgroundView("#00FFFFFF");
    		addBackgroundView("#90FFFFFF");
    		flOperate.addView(llOperateBg);
    
    		// 下部分按钮
    		rlOperate = new RelativeLayout(getContext());
    		rlOperate.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT,
    				RelativeLayout.LayoutParams.MATCH_PARENT));
    
    		// 下部分按钮挂断
    		llHangup = getButtomLayout("挂断", R.drawable.ic_hangup);
    		addBottomView(true, llHangup);
    
    		// 下部分按钮切换
    		llChange = getButtomLayout("切换", R.drawable.ic_change);
    		addBottomView(false, llChange);
    
    		flOperate.addView(rlOperate);
    
    		RelativeLayout.LayoutParams rlpBottom = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT,
    				LayoutParams.WRAP_CONTENT);
    		rlpBottom.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
    		rlParent.addView(flOperate, rlpBottom);
    		return rlParent;
    	}
    
    	private void addBackgroundView(String color) {
    		ImageView ivBg = new ImageView(getContext());
    		ivBg.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 80));
    		ivBg.setBackgroundColor(Color.parseColor(color));
    		llOperateBg.addView(ivBg);
    	}
    
    	private LinearLayout getButtomLayout(String text, int drawId) {
    		LinearLayout llChange = new LinearLayout(getContext());
    		llChange.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
    				LinearLayout.LayoutParams.WRAP_CONTENT));
    		llChange.setOrientation(LinearLayout.VERTICAL);
    		TextView tvChange = new TextView(getContext());
    		tvChange.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
    		tvChange.setText(text);
    		tvChange.setTextSize(18);
    		tvChange.setTextColor(Color.parseColor("#FF393939"));
    		tvChange.setGravity(Gravity.CENTER);
    		tvChange.setCompoundDrawablePadding(2);
    		tvChange.setCompoundDrawablesWithIntrinsicBounds(null, getResources().getDrawable(drawId), null, null);
    		llChange.addView(tvChange);
    		return llChange;
    	}
    
    	private void addBottomView(boolean isLeft, LinearLayout view) {
    		RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,
    				LayoutParams.WRAP_CONTENT);
    		lp.addRule(RelativeLayout.CENTER_VERTICAL);
    		if (isLeft) {
    			lp.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
    			lp.leftMargin = 88;
    		} else {
    			lp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
    			lp.rightMargin = 88;
    		}
    		rlOperate.addView(view, lp);
    	}
    
    	private void initOther() {
    		topEnter = new TranslateAnimation(0, 0, -100, 0);
    		topEnter.setDuration(DURATION);
    
    		topExit = new TranslateAnimation(0, 0, 0, -100);
    		topExit.setDuration(DURATION);
    		topExit.setAnimationListener(this);
    
    		buttomEnter = new TranslateAnimation(0, 0, 300, 0);
    		buttomEnter.setDuration(DURATION);
    
    		buttomExit = new TranslateAnimation(0, 0, 0, 100);
    		buttomExit.setDuration(DURATION);
    	}
    
    	@Override
    	public void onAnimationStart(Animation animation) {
    		// do nothing
    	}
    
    	@Override
    	public void onAnimationEnd(Animation animation) {
    		if (mRoot != null) {
    			mRoot.setVisibility(View.GONE);
    		}
    	}
    
    	@Override
    	public void onAnimationRepeat(Animation animation) {
    		// do nothing
    	}
    
    	@Override
    	public void hide() {
    		isShowing = false;
    		llTitle.startAnimation(topExit);
    		flOperate.startAnimation(buttomExit);
    	}
    
    	@Override
    	public void show() {
    		if (!isShowing) {
    			mRoot.setVisibility(View.VISIBLE);
    			isShowing = true;
    
    			llTitle.startAnimation(topEnter);
    			
    			flOperate.startAnimation(buttomEnter);
    		}
    		handler.removeCallbacks(this);
    		handler.postDelayed(this, DELAYMILLIS);
    	}
    
    	@Override
    	public void run() {
    		hide();
    	}
    
    	@Override
    	public void setTitle(String title) {
    		if (tvTitle != null) {
    			tvTitle.setText(title);
    		}
    	}
    
    	@Override
    	public View getHangupView() {
    		return llHangup;
    	}
    
    	@Override
    	public View getChangeView() {
    		return llChange;
    	}
    
    	@Override
    	public boolean onTouch(View v, MotionEvent event) {
    		show();
    		return false;
    	}
    }
    
    interface IVideoControlPanel {
    
    	/**
    	 * 隐藏操作面板
    	 */
    	public void hide();
    
    	/**
    	 * 显示操作面板
    	 */
    	public void show();
    
    	/**
    	 * 设置标题
    	 * 
    	 * @param title
    	 */
    	public void setTitle(String title);
    
    	/**
    	 * 获取挂断的View
    	 * 
    	 * @return
    	 */
    	public View getHangupView();
    
    	/**
    	 * 获取切换的View
    	 * 
    	 * @return
    	 */
    	public View getChangeView();
    }




    展开全文
  • 1.问题描述:页面跳转是出现卡顿感,闪烁感明显,降低用户体验。2.解决方案:利用动画缓解页面跳转闪烁感3.具体实现export default {data() {return {};},components: {},mounted() {},methods: {}};/*enter-active ...

    1.问题描述:

    页面跳转是出现卡顿感,闪烁感明显,降低用户体验。

    2.解决方案:

    利用动画缓解页面跳转闪烁感

    3.具体实现

    export default {

    data() {

    return {};

    },

    components: {},

    mounted() {},

    methods: {}

    };

    /*

    enter-active 定义进入过渡的结束状态

    leave-active 定义离开过渡的结束状态

    */

    .fade-transform-leave-active,

    .fade-transform-enter-active {

    transition: all 0.5s;

    }

    /*

    enter定义进入过渡的开始状态

    */

    .fade-transform-enter {

    opacity: 0;

    transform: translateX(-30px);

    }

    /*

    leave-to离场动画结束后的状态

    */

    .fade-transform-leave-to {

    opacity: 0;

    transform: translateX(30px);

    }

    展开全文
  • 翻页动画问题

    2020-11-21 19:15:00
    <div><p>仿真翻页,如果向左翻页接着向右(相当于这一次翻页无效) ,这是后点击翻页,动画出现问题</p><p>该提问来源于开源项目:PeachBlossom/treader</p></div>
  • 动画执行有问题

    2020-11-22 16:54:21
    我的频道和其他频道的item移动动画出现问题动画不正常 <pre><code> <?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="...
  • 属性动画兼容性问题

    2017-06-08 10:35:39
    今天在敲一个属性动画时,以上一个问题;Android6.0 API 23的测试机上可以正常运行,但是在Android4.4.2 API 19的手机上就出现崩溃的问题。 解决办法:就是在自己项目的grandle文件中配置下 问题...
  • 最近,在手机QQ魔法表情的项目中,就遇到了奇葩的闪烁问题。 这里说的闪烁,是指动画刚开始播放,突然出现瞬间空白(大概1帧到2帧的时间)。 闪烁分析 这个魔法表情,实际是html5版本的动画,使用Fanvas...
  • 划船器项目第二版程序 第二版程序要求:控制桨频 ,控制力量,热身用,界面美化! 界面美化工作由美工承担。 程序动画调整思路: 第一版程序动画部分显示在picture control控件中,通过双缓冲技术。 第二版程序动画...
  • 效果就是点击下面的标签会执行一个动画进入到上面的坑位中,使用的是TranslateAnimation 但是问题是效果移动只能在当前的容器中出现 一旦左边超出当前容器 就会被其他的组件遮挡 解决办法 在XML的RelativeLayout ...
  • 关于其他的动画效果可以参考我的其他几篇博客《iOS项目开发实战——制作视图的平移动画以及解决移动异常问题》,《iOS项目开发实战——多个视图的平移动画与闭包函数的声明与调用》。 (1)在Main.storyboard中拖入...
  • 这边我建立了一个项目 混合空间/动画蓝图以及角色蓝图如下 但是在运行的时候发现了一个问题 就是不论角色往哪个方向移动(WSAD都按了),但是播放的动画只有一个(就是向前的混合空间那个...
  • 用开源项目JazzyViewPager...但从官网下载的lib导入时会出现找不到视图的问题,不知道是不是我人品不行,所以我就自己写了lib。总之,本篇就是来讲这些可以有华丽动画的viewpager。 JazzyViewPager项目地址:https:
  • 动画卡住的问题

    2021-01-11 06:57:04
    结果还是出现问题 <img alt="a" src="https://img-blog.csdnimg.cn/img_convert/b74df4e1a66501b7f3e3f045cf84733b.png" /></p>该提问来源于开源项目:xiaolin3303/wx-charts</p></div>
  • 1、实现小球动画  1、 先在页面中添加一个小球让它定位到出现位置 ... 2、存在的问题 (位移坐标写死出现问题)    getBoundingClientRect用于获取某个元素相对于视窗的位置集合。...
  • 子节点会出现闪动。去掉rc-animate正常。是否可以提供不要动画的接口。 <p><img alt="image" src="https://img-blog.csdnimg.cn/img_convert/7c06618895e9484cde63b520a231e612.png" /></p><p>该提问来源于开源项目&...
  • 网上在这方面的资料也是杂乱不堪,大部分只是说说如何进行强制横竖屏,没有进一步说明动画操作,虽然大部分的情况是没有任何问题的,可是当用户快速的从左横屏→竖屏→右横屏的时候就会出现PlayView的尺寸显示不正确的...
  • ios7 nav动画问题

    2014-04-28 15:54:00
    在老项目上增加了几个新控制器,发现在ios7上,进行nav的pop和push时,新加的几个界面会出现被操作的界面卡顿或者闪现的问题.后来用慢动画仔细看,发现是上层的界面,在界面切换的过程中,背景是透明的= =开始以为是xib...
  • android播放帧动画OOM问题解决

    千次阅读 2016-01-19 17:12:51
    近来在写项目时,有遇到使用android原生的序列帧动画时,在部分手机(尤其是内存小的)上出现了OOM问题,这种问题是不可避免的。1.我觉首先你要看看是否有适配问题,因为你选择播放的图片要是没有放入对应的适配...
  • 首先上出现问题的代码 <!DOCTYPE html> <html> <head> <title></title> <style type=text/css> .haha-leave-active { transition: opacity .5s; } .haha-leave-to /* .fade...
  • 项目开发时出现一个奇怪的现象,界面上出现奇怪的动画效果,字体飞进飞出,各种控件移动的效果,但是并没有设置这些动画项目重新运行又好了,开始以为是偶然事件,觉得是系统缓存之类的问题,后来无意间发现是只要...
  • 关于解决android帧动画卡顿问题

    千次阅读 2019-08-20 16:30:48
    公司有一个项目需求,需要在一个特定的android机顶盒上做一组帧动画的效果,由于设备配置比较低导致出现卡顿现象,而在我自己的手机及pad上是不会卡的,参考了网上的代码,发现还是又卡顿现象,于是自己再稍微做了下...
  • 最近在做的一个项目,NPC的动画是用Spine来做的。游戏中随着不同的状态变化,会导致NPC在“待机”、“准备进攻”、“进攻“、”眩晕“、”死亡“等等多种状态之间来回切换,NPC每切换一种状态,随之就要立刻播放该...
  • iOS11转场动画问题

    2021-01-08 09:28:26
    但在push和pop时会出现下图这种情况,不知道是为什么。 <p><img alt="Uploading Simulator Screen Shot - iPhone 7 - 2017-09-01 at 13.49.04.png…" src="" /></p><p>该提问来源于开源项目:MoZhouqi/...
  • 之前已经提到过动作捕捉的基本操作,以及motion builder的使用方法,不过我们在使用的过程中还是出现了很多的问题:1.在穿上设备以后,我们要先进行动作的矫正,让模型中的人和我们现实中的人的动作保持一致这时,...
  • 最近做Android9.0的项目定制出现开机动画铃声的问题,以下是解决方案 解决预置开机动画,铃声无效果的问题 1.device/mediatek/mt6739/device.mk PRODUCT_PACKAGES += mtkbootanimation PRODUCT_PACKAGES += ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 480
精华内容 192
关键字:

动画项目出现问题