當(dāng)前位置:首頁(yè) > 芯聞號(hào) > 充電吧
[導(dǎo)讀]點(diǎn)贊+1效果:GoodView方法:使用GoodView的Demo:? ?public class MainActivity extends Activity {????????@Override ?

點(diǎn)贊+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);
????????????????}
????????????});

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



實(shí)踐GitHub開(kāi)源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;

/**
?*?點(diǎn)贊效果
?*
?*?@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();
????}

????/**
?????*?設(shè)置文本
?????*
?????*?@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();
????}

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

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

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

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

????/**
?????*?設(shè)置圖片
?????*
?????*?@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());
????}

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

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

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

????/**
?????*?設(shè)置動(dòng)畫(huà)時(shí)長(zhǎng)
?????*
?????*?@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);
????????}
????}

????/**
?????*?動(dòng)畫(huà)
?????*
?????*?@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;???//?默認(rèn)移動(dòng)距離

????int?FROM_Y_DELTA?=?0;?//?Y軸移動(dòng)起始偏移量

????int?TO_Y_DELTA?=?DISTANCE;?//?Y軸移動(dòng)最終偏移量

????float?FROM_ALPHA?=?1.0f;????//?起始時(shí)透明度

????float?TO_ALPHA?=?0.0f;??//?結(jié)束時(shí)透明度

????int?DURATION?=?800;?//?動(dòng)畫(huà)時(shí)長(zhǎng)

????String?TEXT?=?"";?//?默認(rèn)文本

????int?TEXT_SIZE?=?16;?//?默認(rèn)文本字體大小

????int?TEXT_COLOR?=?Color.BLACK;???//?默認(rèn)文本字體顏色

}


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();
????}

}





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

9月2日消息,不造車(chē)的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

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

關(guān)鍵字: 汽車(chē) 人工智能 智能驅(qū)動(dòng) BSP

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

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

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

關(guān)鍵字: 騰訊 編碼器 CPU

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

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

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

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

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

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

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

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

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

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉