开源项目GoodView点赞效果
来源:互联网 发布:搜索引擎优化视频 编辑:程序博客网 时间:2024/06/04 18:29
点赞+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); } }); } }
<span style="font-family: Arial, Helvetica, sans-serif;">实践GitHub开源GoodView:</span>
<span style="font-family: Arial, Helvetica, sans-serif;"></span>
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(); }}
0 1
- 开源项目GoodView点赞效果
- GoodView 点赞
- GoodView的使用(一个点赞的动画)
- 点赞+1 效果
- IOS 点赞效果
- 点赞+1效果
- js点赞效果++和--
- 点赞动画的效果
- SurfaceView实现点赞效果
- SurfaceView实现点赞效果
- 简单的点赞效果
- android点赞效果--LikeView
- iOS开源项目 Cell滑动效果
- android各种效果开源项目
- 个人iOS项目常用效果方法注意点集锦
- 仿映客点赞效果 点赞上升动画&&全屏点赞
- 一步一步实现Periscope点赞效果
- 移动端zepto点赞效果分析
- Java 8 特性 – 终极手册
- hdu5695Gym Class 「拓扑排序」
- css +html实现网站二级导航
- javascript语法之循环语句小练习
- 四色标记算法
- 开源项目GoodView点赞效果
- Android的4中启动模式
- iOS实时卡顿监控
- 活动图——详解
- python 使用zip合并相邻的列表项
- 【C++】串口通信IN C++(适用于Microsoft Visual Studio 2010/2012/2013 ,VC++6.0 )
- python getopt 用法
- TEXT部分文字颜色的改变
- 新一代与12-factors:依赖