Qt動畫之滑鼠水滴點選效果
一、簡述
前幾天在群裡看見有個小夥伴用的一款gif錄屏軟體有一個類似水滴的點選效果。於是想了想,便開始了Code。思路也很簡單,就是藉助Qt的動畫類QVariantAnimation然後不斷重繪達到點選的動畫效果,先看一下效果圖。
二、程式碼之路
WaterDrop.h
#include <QtWidgets/QWidget>
#include <QVariantAnimation>
class WaterDrop : public QWidget
{
Q_OBJECT
public:
WaterDrop(QWidget *parent = Q_NULLPTR);
~WaterDrop();
void show();
void move(const QPoint &point);
void setColor(QColor color);
private:
void paintEvent(QPaintEvent *event);
public slots:
void onRaduisChanged(QVariant value);
private:
QVariantAnimation* m_waterDropAnimation;
// 水滴變化的半徑;
int m_animationRadius;
// 水滴的顏色;
QColor m_waterDropColor;
};
WaterDrop.cpp
#include "WaterDrop.h"
#include <QPainter>
// 水滴的半徑;
#define WATER_DROP_RADIUS 15
WaterDrop::WaterDrop(QWidget *parent)
: QWidget(parent)
, m_waterDropAnimation(NULL)
, m_animationRadius(0)
, m_waterDropColor(QColor(255, 120, 0, 150)) // 預設為橘黃色;
{
this->setFixedSize(QSize(WATER_DROP_RADIUS * 2 , WATER_DROP_RADIUS *2));
this->setWindowFlags(Qt::FramelessWindowHint | Qt::Tool);
this->setAttribute(Qt::WA_TranslucentBackground);
// 控制元件顯示完關閉後自動刪除;
this->setAttribute(Qt::WA_DeleteOnClose);
m_waterDropAnimation = new QVariantAnimation(this);
}
WaterDrop::~WaterDrop()
{
}
void WaterDrop::move(const QPoint &point)
{
// 這裡要把滑鼠點選的點轉換為圓心點座標;
QPoint translatePoint = point - QPoint(WATER_DROP_RADIUS, WATER_DROP_RADIUS);
__super::move(translatePoint);
}
void WaterDrop::show()
{
__super::show();
// 通過動畫類不斷進行重繪;
m_waterDropAnimation->setStartValue(0);
m_waterDropAnimation->setEndValue(WATER_DROP_RADIUS);
m_waterDropAnimation->setDuration(350);
connect(m_waterDropAnimation, &QVariantAnimation::valueChanged, this, &WaterDrop::onRaduisChanged);
connect(m_waterDropAnimation, &QVariantAnimation::finished, this, &WaterDrop::close);
m_waterDropAnimation->start();
}
// 設定水滴的顏色;
void WaterDrop::setColor(QColor color)
{
m_waterDropColor = color;
}
// 繪製滑鼠的水滴點選效果;
void WaterDrop::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
painter.setPen(Qt::NoPen);
painter.setBrush(QBrush(m_waterDropColor));
// 思路就是先繪製一個固定大小的圓A,然後繪製同一圓心的透明的圓B,然後通過動畫類是圓B的半徑從0增長到WATER_DROP_RADIUS,以致覆蓋固定的圓A;
QPainterPath waterDropPath;
waterDropPath.addEllipse(QPoint(WATER_DROP_RADIUS, WATER_DROP_RADIUS), WATER_DROP_RADIUS, WATER_DROP_RADIUS);
QPainterPath hidePath;
hidePath.addEllipse(QPoint(WATER_DROP_RADIUS, WATER_DROP_RADIUS), m_animationRadius, m_animationRadius);
waterDropPath -= hidePath;
painter.drawPath(waterDropPath);
}
void WaterDrop::onRaduisChanged(QVariant value)
{
// 不斷增加圓B的半徑值,並重繪;
m_animationRadius = value.toInt();
update();
}
測試程式碼
// 新建一視窗類,重寫mousePressEvent事件即可;
void MyWidget::mousePressEvent(QMouseEvent *event)
{
QPoint cursorPos = event->pos();
qDebug() << "mousePressEvent" << cursorPos;
WaterDrop* waterDrop = new WaterDrop();
waterDrop->move(this->mapToGlobal(cursorPos));
waterDrop->setColor(Qt::green);
waterDrop->show();
}
尾
後續會繼續分享Qt動畫類做出的一些動畫特效,敬請期待哈O(∩_∩)O!
支援一下,請點個贊吧!!!
程式碼下載
相關推薦
Qt動畫之滑鼠水滴點選效果
一、簡述 前幾天在群裡看見有個小夥伴用的一款gif錄屏軟體有一個類似水滴的點選效果。於是想了想,便開始了Code。思路也很簡單,就是藉助Qt的動畫類QVariantAnimation然後不斷重繪達到點選的動畫效果,先看一下效果圖。 二、程式碼之路
Android原始碼解析--Material Design之水波紋點選效果RippleEffect使用
好了,這樣差不多就完成了我們的水波漣漪效果了。。。。 看一下怎麼用吧? 如果你的開發IDE是Android Studio那麼我們可以把github上的庫整合到我們的專案中, <span style="font-size:14px;">dependencies { comp
Android之水波紋點選效果(RippleView)
Android5.0後各種炫的效果紛紛出來,寫這篇部落格主要是講的是按鈕點選效果帶有的水波紋(波浪式)。 當然我寫的這個是自定義來實現的,在低版本(5.0一下)也可以實現點選效果。看看效果圖: 上圖可看出 點選有抖動效果和不抖動效果。 佈局程式碼
Android學習之Android 5.0分享動畫實現微信點選全屏效果
Android5.0過渡動畫,請看 今天用分享動畫實現微信點選全屏效果 本文原始碼下載地址 peizhi 配置 build.gradle: compile 'com.android.support:recyclerview-v7:23.
Android MaterialDesign之水波點選效果的幾種實現方法
什麼是水波點選的效果? 下面是幾種不同的實現方法的效果圖以及實現方法 Video_2016-08-31_003846 如何實現? 方法一 使用
Android 養成記-1 --1.4 動畫系列 (選單側滑+圖示旋轉+dialog彈出+點選效果)
選單側滑動畫 思想是佈局檔案裡,將選單欄跟內容欄放在同一個layout中,但是選單欄初始是隱藏狀態. 總佈局是線性水平佈局: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
部落格園自定義頁面風格設計 後續篇(頁面設計模式及程式碼高亮 滑鼠點選效果升級)
前言 在之前所寫過的部落格園自定義頁面風格設計篇中,我們已經說明了其中兩種風格的頁面設計,滑鼠圖案的修改,公告欄的設定,背景音樂的製作,關於CSS以及用Canvas和requestAnimFrame做動畫特效,在本文中我們將教大家制作當前簡約的頁面製作方法。 只要你們有需求,我會盡量幫助到大家,在此感謝各
滑鼠懸停與點選效果
html程式碼 正常效果 點選效果 <a class="btn-v2 short-full-screen-v2 btn-none-v2" href="#"><i class="icon-short-full-screen" style="margi
Android TextView的點選效果之改變背景顏色
在學習Android過程中,我們有時想要TextView有點選效果,不是文字的變化而是背景顏色的變化,那麼怎麼來實現呢? 下面將介紹如何實現: 1.在res目錄下的drawable(此檔案是自己手動建立的)檔案下建立一個點選效果的檔案:tv_bg_selector.xml
自定義控制元件之ImageView實現點選之後有陰影效果
今天美工 直接給我一張圖片, 要我實現圖片點選之後有陰影效果, 當時想到了ImageButton, 隨即自己寫了個Demo, 發現ImageButton繼承ImageView 會有一個預設的背景樣式;而且在佈局中設計src(前景) 太醜, 於是,自己寫了個自定義控制元件Im
Android自定義View之點選效果
最近在做新版本,各種UI效果都需要自定義,而自定義View點選效果問題一直困擾著我。各種找資料也沒有找到自己想要的東西,可能是我關鍵字打的不對吧。最後在檢視TextView的原始碼時解決了我的問題,由於原始碼功能太多,不易查詢,特此提取記錄。 UI效果
Android在xml中設定元件風格(圓角,點選效果selector,邊框,進度條風格,動畫)TextView文字透明度
在標題中寫到的元件的特效,都是在xml中為元件定義的 步驟: 1.在drawable下建立“Drawable resource file”,命名為:btn_corners(表示功能:圓角button) 2.在btn_corners.xml檔案中寫入程式碼如下 3.TextV
Android中的Button自定義點選效果之改變點選時按鈕的顏色
在Android中定義按鈕的點選效果可以通過自定義selector,通過設定兩張不同的背景圖片來改變點選時和未點選時的狀態,但有時候僅僅只想改變點選時按鈕的顏色,但是在selector中並不能直接定義顏色。下面程式碼實現一個點選按鈕時僅僅改變按鈕顏色。 1.
Qt 動畫之QPropertyAnimation
rect() 定義 () val valueat idt duration width 時間 1 //定義 2 QPropertyAnimation* _pAnimation= new QPropertyAnimation(this, "geometry"); 3
Android之按鍵防止點選過快的方法
public class UtilFastClick { // 兩次點選按鈕之間的點選間隔不能少於1000毫秒 private static final int MIN_CLICK_DELAY_TIME = 1000; private static long lastCl
html圖片按鈕&按鈕點選效果
} /** * 按鈕樣式 */ /* Radomir */ .ripple { position: relative; /*//隱藏溢位的徑向漸變背景*/ overflow: hidden; } .ripp
android:多次點選效果實現
public class MainActivity extends AppCompatActivity{ private final static int COUNTS = 5;//點選次數 private final static long VALIDTIME = 1300;/
Android設定常見控制元件點選效果
一. Imageview的點選效果——圖片稍微變暗突出點選效果 public class ClickImageView extends AppCompatImageView { public ClickImageView(Context context) { super(context);
選單新增點選效果
css: li.active a{ color: #FFCC00; border-bottom:2px solid #FFCC00 ; padding-bottom: 6px; }
Android水波紋點選效果
轉:Android水波紋點選效果 Android API 21及以上新增了ripple標籤用來實現水波紋的效果。我們可以通過設定ripple背景來實現一些View點選效果。 水波紋樣圖 1. 水波紋效果實現 1)系統效果 系統有界效果 在API 21以上使用,才有波紋效果;