高仿微信-微信EM开发流程--(2)自定义对话框

在开发项目中,经常遇到这种提示性的对话框,当时系统自有提供的对话框就显得太不美观了。所以,为了界面的美观,也为了代码的简洁性,可以自己封装一个

(1)首先分析对话框的整体样式,可以看到,对话框有很多样式,底部按钮数量都不确定,但是都有一个共同的特点,就是外部总体样式是相同的,只不过,标题与提示文字,还有按钮不一样,记得在我的前几篇博客说过,有共同点的话,那么就先抽取他们的共同点,不同点的话就使用抽象方法,让各子类去各自实现,所以第一步是新建这些对话框的父类BaseDialog;

public class BaseDialog extends Dialog implements View.OnClickListener
BaseDialog继承Dialog,布局如上图,大体分为三个部分,标题部分,内容区域和按钮区域,其中横线上方是标题部分,下方为内容区域,按钮部分暂时先隐藏起来,便于以后调用,整个类中要实现的方法也很简单,只要提供给外界能够修改三个区域内容的方法即可。

(2)新建WarnTipDialog继承BaseDialog去实现提示性对话框

public class WarnTipDialog extends BaseDialog implements View.OnClickListener 
在类中提供设置内容的方法,就完成了,以后可以直接new WarnTipDialog 就可以轻轻松松完成一个对话框。


(3)有时候,我们需要的不仅仅是提示性的对话框,比如我们在登录时,需要新开一个现场去加载某些信息,这是耗时操作,此时,主线程的UI应该显示正在加载的页面,让用户有更好的用户体验,就像下图这样,其中左边是一个不断例外翻转的图片,右边文字是可以设置的。

新建一个FlippingLoadingDialog继承自BaseDialog,这里面有个我认为比较难的点,就是左边不断里外翻转的图片,这是一个自定义ImageView,不用想,当然要使用动画,

这里,我自定义了一个翻转动画,

public class RotateAnimation extends Animation {

   private Camera mCamera;
   private float mCenterX;
   private float mCenterY;
   private Mode mMode;

   public RotateAnimation(float centerX, float centerY, Mode mode) {
      mCenterX = centerX;
      mCenterY = centerY;
      mMode = mode;
   }

   @Override
   public void initialize(int width, int height, int parentWidth,
         int parentHeight) {
      super.initialize(width, height, parentWidth, parentHeight);
      mCamera = new Camera();
   }

   @Override
   protected void applyTransformation(float interpolatedTime, Transformation t) {
      float deg = 0.0F + 360.0F * interpolatedTime;
      Matrix matrix = t.getMatrix();
      mCamera.save();
      if (mMode == Mode.X)
         mCamera.rotateX(deg);
      if (mMode == Mode.Y)
         mCamera.rotateY(deg);
      if (mMode == Mode.Z)
         mCamera.rotateZ(deg);

      mCamera.getMatrix(matrix);
      mCamera.restore();
      matrix.preTranslate(-mCenterX, -mCenterY);
      matrix.postTranslate(mCenterX, mCenterY);

   }

   public enum Mode {
      X, Y, Z;
   }
}

applyTransformation()方法就是动画具体的实现,系统会以一个比较高的频率来调用这个方法,一般情况下60FPS,是一个非常流畅的画面了,也就是16ms,其中Camera可不是照相机,这里的Camera是 android.graphics包下的Camera,可以理解为2D图形系统中的视角,或者照相机的机位,根据透视的原理我们可以实现一些简单的3D效果。

有了这个自定义ImageView,再实现加载框的功能就比较容易了,以后在项目中遇到在后台耗时操作,就可以在主UI上去使用这个加载框。

Qt Quick是Qt框架的一部分,用于开发跨平台的图形界面应用程序。它提供了一套功能强大、易于使用的工具和组件,能够快速地创建现代化的用户界面。 高仿微信是指使用Qt Quick来实现一个与微信界面相似的应用程序。借助Qt Quick的强大功能,可以轻松实现微信中常见的界面元素和交互效果,包括聊天界面、联系人列表、朋友圈等。 Qt Quick使用QML语言编写界面,具有声明式编程的特点,使得开发界面更加直观和灵活。开发者可以通过编写QML代码来描述界面的外观和行为,而无需深入了解底层的图形编程。 除了QML之外,Qt Quick还提供了一组丰富的可重用组件,如按钮、文本框、列表视图等,开发者可以直接使用这些组件来快速构建界面。同时,Qt Quick还支持自定义组件的开发开发者可以根据需要创建自己的独特组件。 在实现高仿微信过程中,可以利用Qt Quick的布局系统来构建复杂的界面布局,使用动画效果和过渡效果来增加用户体验,还可以通过Qt Quick提供的网络模块实现与服务器的通信,实现实时聊天功能。 总之,借助Qt Quick的强大功能和易用性,可以快速开发高仿微信的应用程序,实现类似的界面和功能。无论是从界面还是从交互体验方面,Qt Quick都能满足开发者的需求,并帮助开发者更加高效地开发出优秀的应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值