當前位置:首頁 > 芯聞號 > 充電吧
[導讀]點贊+1效果:GoodView方法:使用GoodView的Demo:? ?public class MainActivity extends Activity {????????@Override ?

點贊+1效果:

GoodView方法:


使用GoodView的Demo:

? ?public class MainActivity extends Activity {

????????@Override
????????protected?void?onCreate(Bundle?savedInstanceState)?{
????????????super.onCreate(savedInstanceState);
????????????setContentView(R.layout.activity_main)

????????????final?GoodView?goodView?=?new?GoodView(this);
????????????Button?button?=?new?Button(this);
????????????button.setOnClickListener(new?View.OnClickListener()?{
????????????????@Override
????????????????public?void?onClick(View?v)?{
????????????????????goodView.setText("+1");
????????????????????goodView.show(v);
????????????????}
????????????});

????????}
????}



實踐GitHub開源GoodView:


GoodView.java :


/*
?*?Copyright?(C)?2016?venshine.cn@gmail.com
?*
?*?Licensed?under?the?Apache?License,?Version?2.0?(the?"License");
?*?you?may?not?use?this?file?except?in?compliance?with?the?License.
?*?You?may?obtain?a?copy?of?the?License?at
?*
?*??????http://www.apache.org/licenses/LICENSE-2.0
?*
?*?Unless?required?by?applicable?law?or?agreed?to?in?writing,?software
?*?distributed?under?the?License?is?distributed?on?an?"AS?IS"?BASIS,
?*?WITHOUT?WARRANTIES?OR?CONDITIONS?OF?ANY?KIND,?either?express?or?implied.
?*?See?the?License?for?the?specific?language?governing?permissions?and
?*?limitations?under?the?License.
?*/
package?sunny.example.opengoodview.goodview;

import?android.annotation.SuppressLint;
import?android.content.Context;
import?android.graphics.Color;
import?android.graphics.drawable.ColorDrawable;
import?android.graphics.drawable.Drawable;
import?android.os.Build;
import?android.os.Handler;
import?android.text.TextUtils;
import?android.util.TypedValue;
import?android.view.View;
import?android.view.animation.AlphaAnimation;
import?android.view.animation.Animation;
import?android.view.animation.AnimationSet;
import?android.view.animation.TranslateAnimation;
import?android.widget.PopupWindow;
import?android.widget.RelativeLayout;
import?android.widget.TextView;

/**
?*?點贊效果
?*
?*?@author?venshine
?*/
@SuppressLint("NewApi")
public?class?GoodView?extends?PopupWindow?implements?IGoodView?{

????private?String?mText?=?TEXT;

????private?int?mTextColor?=?TEXT_COLOR;

????private?int?mTextSize?=?TEXT_SIZE;

????private?int?mFromY?=?FROM_Y_DELTA;

????private?int?mToY?=?TO_Y_DELTA;

????private?float?mFromAlpha?=?FROM_ALPHA;

????private?float?mToAlpha?=?TO_ALPHA;

????private?int?mDuration?=?DURATION;

????private?int?mDistance?=?DISTANCE;

????private?AnimationSet?mAnimationSet;

????private?boolean?mChanged?=?false;

????private?Context?mContext?=?null;

????private?TextView?mGood?=?null;

????public?GoodView(Context?context)?{
????????super(context);
????????mContext?=?context;
????????initView();
????}

????private?void?initView()?{
????????RelativeLayout?layout?=?new?RelativeLayout(mContext);
????????RelativeLayout.LayoutParams?params?=
????????????????new?RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,
????????????????????????RelativeLayout.LayoutParams.WRAP_CONTENT);
????????params.addRule(RelativeLayout.CENTER_HORIZONTAL);
????????params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);

????????mGood?=?new?TextView(mContext);
????????mGood.setIncludeFontPadding(false);
????????mGood.setTextSize(TypedValue.COMPLEX_UNIT_DIP,?mTextSize);
????????mGood.setTextColor(mTextColor);
????????mGood.setText(mText);
????????mGood.setLayoutParams(params);
????????layout.addView(mGood);
????????setContentView(layout);

????????int?w?=?View.MeasureSpec.makeMeasureSpec(0,?View.MeasureSpec.UNSPECIFIED);
????????int?h?=?View.MeasureSpec.makeMeasureSpec(0,?View.MeasureSpec.UNSPECIFIED);
????????mGood.measure(w,?h);
????????setWidth(mGood.getMeasuredWidth());
????????setHeight(mDistance?+?mGood.getMeasuredHeight());
????????setBackgroundDrawable(new?ColorDrawable(Color.TRANSPARENT));
????????setFocusable(false);
????????setTouchable(false);
????????setOutsideTouchable(false);

????????mAnimationSet?=?createAnimation();
????}

????/**
?????*?設置文本
?????*
?????*?@param?text
?????*/
????public?void?setText(String?text)?{
????????if?(TextUtils.isEmpty(text))?{
????????????throw?new?IllegalArgumentException("text?cannot?be?null.");
????????}
????????mText?=?text;
????????mGood.setText(text);
????????mGood.setBackgroundDrawable(new?ColorDrawable(Color.TRANSPARENT));
????????int?w?=?(int)?mGood.getPaint().measureText(text);
????????setWidth(w);
????????setHeight(mDistance?+?getTextViewHeight(mGood,?w));
????}

????private?static?int?getTextViewHeight(TextView?textView,?int?width)?{
????????int?widthMeasureSpec?=?View.MeasureSpec.makeMeasureSpec(width,?View.MeasureSpec.AT_MOST);
????????int?heightMeasureSpec?=?View.MeasureSpec.makeMeasureSpec(0,?View.MeasureSpec.UNSPECIFIED);
????????textView.measure(widthMeasureSpec,?heightMeasureSpec);
????????return?textView.getMeasuredHeight();
????}

????/**
?????*?設置文本顏色
?????*
?????*?@param?color
?????*/
????private?void?setTextColor(int?color)?{
????????mTextColor?=?color;
????????mGood.setTextColor(color);
????}

????/**
?????*?設置文本大小
?????*
?????*?@param?textSize
?????*/
????private?void?setTextSize(int?textSize)?{
????????mTextSize?=?textSize;
????????mGood.setTextSize(TypedValue.COMPLEX_UNIT_DIP,?textSize);
????}

????/**
?????*?設置文本信息
?????*
?????*?@param?text
?????*?@param?textColor
?????*?@param?textSize
?????*/
????public?void?setTextInfo(String?text,?int?textColor,?int?textSize)?{
????????setTextColor(textColor);
????????setTextSize(textSize);
????????setText(text);
????}

????/**
?????*?設置圖片
?????*
?????*?@param?resId
?????*/
????public?void?setImage(int?resId)?{
????????setImage(mContext.getResources().getDrawable(resId));
????}

????/**
?????*?設置圖片
?????*
?????*?@param?drawable
?????*/
????public?void?setImage(Drawable?drawable)?{
????????if?(drawable?==?null)?{
????????????throw?new?IllegalArgumentException("drawable?cannot?be?null.");
????????}
????????if?(Build.VERSION.SDK_INT?>=?Build.VERSION_CODES.JELLY_BEAN)?{
????????????mGood.setBackground(drawable);
????????}?else?{
????????????mGood.setBackgroundDrawable(drawable);
????????}
????????mGood.setText("");
????????setWidth(drawable.getIntrinsicWidth());
????????setHeight(mDistance?+?drawable.getIntrinsicHeight());
????}

????/**
?????*?設置移動距離
?????*
?????*?@param?dis
?????*/
????public?void?setDistance(int?dis)?{
????????mDistance?=?dis;
????????mToY?=?dis;
????????mChanged?=?true;
????????setHeight(mDistance?+?mGood.getMeasuredHeight());
????}

????/**
?????*?設置Y軸移動屬性
?????*
?????*?@param?fromY
?????*?@param?toY
?????*/
????public?void?setTranslateY(int?fromY,?int?toY)?{
????????mFromY?=?fromY;
????????mToY?=?toY;
????????mChanged?=?true;
????}

????/**
?????*?設置透明度屬性
?????*
?????*?@param?fromAlpha
?????*?@param?toAlpha
?????*/
????public?void?setAlpha(float?fromAlpha,?float?toAlpha)?{
????????mFromAlpha?=?fromAlpha;
????????mToAlpha?=?toAlpha;
????????mChanged?=?true;
????}

????/**
?????*?設置動畫時長
?????*
?????*?@param?duration
?????*/
????public?void?setDuration(int?duration)?{
????????mDuration?=?duration;
????????mChanged?=?true;
????}

????/**
?????*?重置屬性
?????*/
????public?void?reset()?{
????????mText?=?TEXT;
????????mTextColor?=?TEXT_COLOR;
????????mTextSize?=?TEXT_SIZE;
????????mFromY?=?FROM_Y_DELTA;
????????mToY?=?TO_Y_DELTA;
????????mFromAlpha?=?FROM_ALPHA;
????????mToAlpha?=?TO_ALPHA;
????????mDuration?=?DURATION;
????????mDistance?=?DISTANCE;
????????mChanged?=?false;
????????mAnimationSet?=?createAnimation();
????}

????/**
?????*?展示
?????*
?????*?@param?v
?????*/
????public?void?show(View?v)?{
????????if?(!isShowing())?{
????????????int?offsetY?=?-v.getHeight()?-?getHeight();
????????????showAsDropDown(v,?v.getWidth()?/?2?-?getWidth()?/?2,?offsetY);
????????????if?(mAnimationSet?==?null?||?mChanged)?{
????????????????mAnimationSet?=?createAnimation();
????????????????mChanged?=?false;
????????????}
????????????mGood.startAnimation(mAnimationSet);
????????}
????}

????/**
?????*?動畫
?????*
?????*?@return
?????*/
????private?AnimationSet?createAnimation()?{
????????mAnimationSet?=?new?AnimationSet(true);
????????TranslateAnimation?translateAnim?=?new?TranslateAnimation(0,?0,?mFromY,?-mToY);
????????AlphaAnimation?alphaAnim?=?new?AlphaAnimation(mFromAlpha,?mToAlpha);
????????mAnimationSet.addAnimation(translateAnim);
????????mAnimationSet.addAnimation(alphaAnim);
????????mAnimationSet.setDuration(mDuration);
????????mAnimationSet.setAnimationListener(new?Animation.AnimationListener()?{
????????????@Override
????????????public?void?onAnimationStart(Animation?animation)?{
????????????}

????????????@Override
????????????public?void?onAnimationEnd(Animation?animation)?{
????????????????if?(isShowing())?{
????????????????????new?Handler().post(new?Runnable()?{
????????????????????????@Override
????????????????????????public?void?run()?{
????????????????????????????dismiss();
????????????????????????}
????????????????????});
????????????????}
????????????}

????????????@Override
????????????public?void?onAnimationRepeat(Animation?animation)?{
????????????}
????????});
????????return?mAnimationSet;
????}
}

IGoodView.java :



/*
?*?Copyright?(C)?2016?venshine.cn@gmail.com
?*
?*?Licensed?under?the?Apache?License,?Version?2.0?(the?"License");
?*?you?may?not?use?this?file?except?in?compliance?with?the?License.
?*?You?may?obtain?a?copy?of?the?License?at
?*
?*??????http://www.apache.org/licenses/LICENSE-2.0
?*
?*?Unless?required?by?applicable?law?or?agreed?to?in?writing,?software
?*?distributed?under?the?License?is?distributed?on?an?"AS?IS"?BASIS,
?*?WITHOUT?WARRANTIES?OR?CONDITIONS?OF?ANY?KIND,?either?express?or?implied.
?*?See?the?License?for?the?specific?language?governing?permissions?and
?*?limitations?under?the?License.
?*/
package?sunny.example.opengoodview.goodview;

import?android.graphics.Color;

/**
?*?@author?venshine
?*/
public?interface?IGoodView?{

????int?DISTANCE?=?60;???//?默認移動距離

????int?FROM_Y_DELTA?=?0;?//?Y軸移動起始偏移量

????int?TO_Y_DELTA?=?DISTANCE;?//?Y軸移動最終偏移量

????float?FROM_ALPHA?=?1.0f;????//?起始時透明度

????float?TO_ALPHA?=?0.0f;??//?結束時透明度

????int?DURATION?=?800;?//?動畫時長

????String?TEXT?=?"";?//?默認文本

????int?TEXT_SIZE?=?16;?//?默認文本字體大小

????int?TEXT_COLOR?=?Color.BLACK;???//?默認文本字體顏色

}


MainActivity.java :



/*
?*?Copyright?(C)?2016?venshine.cn@gmail.com
?*
?*?Licensed?under?the?Apache?License,?Version?2.0?(the?"License");
?*?you?may?not?use?this?file?except?in?compliance?with?the?License.
?*?You?may?obtain?a?copy?of?the?License?at
?*
?*??????http://www.apache.org/licenses/LICENSE-2.0
?*
?*?Unless?required?by?applicable?law?or?agreed?to?in?writing,?software
?*?distributed?under?the?License?is?distributed?on?an?"AS?IS"?BASIS,
?*?WITHOUT?WARRANTIES?OR?CONDITIONS?OF?ANY?KIND,?either?express?or?implied.
?*?See?the?License?for?the?specific?language?governing?permissions?and
?*?limitations?under?the?License.
?*/
package?sunny.example.opengoodview;

import?android.graphics.Color;
import?android.os.Bundle;
import?android.support.v7.app.ActionBarActivity;
//import?android.support.v7.app.AppCompatActivity;
import?android.view.View;
import?android.widget.ImageView;

import?sunny.example.opengoodview.goodview.GoodView;

/**
?*?Demo
?*
?*?@author?venshine
?*/
public?class?MainActivity?extends?ActionBarActivity?{

????GoodView?mGoodView;

????@Override
????protected?void?onCreate(Bundle?savedInstanceState)?{
????????super.onCreate(savedInstanceState);
????????setContentView(R.layout.activity_main);
????????mGoodView?=?new?GoodView(this);
????}

????//android:onClick="good"
????public?void?good(View?view)?{
????????((ImageView)?view).setImageResource(R.drawable.good_checked);
????????mGoodView.setText("+1");
????????mGoodView.show(view);
????}

????public?void?good2(View?view)?{
????????((ImageView)?view).setImageResource(R.drawable.good_checked);
????????mGoodView.setImage(getResources().getDrawable(R.drawable.good_checked));
????????mGoodView.show(view);
????}

????public?void?collection(View?view)?{
????????((ImageView)?view).setImageResource(R.drawable.collection_checked);
????????mGoodView.setTextInfo("收藏成功",?Color.parseColor("#f66467"),?12);
????????mGoodView.show(view);
????}

????public?void?bookmark(View?view)?{
????????((ImageView)?view).setImageResource(R.drawable.bookmark_checked);
????????mGoodView.setTextInfo("收藏成功",?Color.parseColor("#ff941A"),?12);
????????mGoodView.show(view);
????}

????public?void?reset(View?view)?{
????????((ImageView)?findViewById(R.id.good)).setImageResource(R.drawable.good);
????????((ImageView)?findViewById(R.id.good2)).setImageResource(R.drawable.good);
????????((ImageView)?findViewById(R.id.collection)).setImageResource(R.drawable.collection);
????????((ImageView)?findViewById(R.id.bookmark)).setImageResource(R.drawable.bookmark);
????????mGoodView.reset();
????}

}





本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或將催生出更大的獨角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產業(yè)博覽會開幕式在貴陽舉行,華為董事、質量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經營業(yè)績穩(wěn)中有升 落實提質增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數(shù)字經濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯(lián)合牽頭組建的NVI技術創(chuàng)新聯(lián)盟在BIRTV2024超高清全產業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉