随滑动改变的动态矩形背景
来源:互联网 发布:mac关闭icloud drive 编辑:程序博客网 时间:2024/06/06 06:02
随滑动改变的动态矩形背景
前言
可能看到这个标题有点懵逼,本屌的表达能力有限,最近工作比较清闲,朋友公司正在做到这个效果,所以就帮基友写了一个小Demo,总体来说就是以下效果.
Demo下载
朋友公司需要达到的效果
Demo中的效果
使用过程
layout
<com.fengan.dynamicrectangledemo.DynamicRectangleView android:id="@+id/drv" android:layout_width="match_parent" android:layout_height="250dp" app:fengan_limit_percent="0.2" app:fengan_percent="0.5" ></com.fengan.dynamicrectangledemo.DynamicRectangleView>
code
@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); SeekBar seekBar = (SeekBar) findViewById(R.id.sb); final DynamicRectangleView dynamicRectangleView = (DynamicRectangleView) findViewById(R.id.drv); seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int i, boolean b) { dynamicRectangleView.setPercent((float)i/100); } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } }); findViewById(R.id.btn_scrollview).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { startActivity(new Intent(MainActivity.this,ScrollViewActivity.class)); } });}
attrs.xml(有灵性的哥哥们应该猜得到分别对应的什么意思咯)
<resources><declare-styleable name="DynamicRectangleView"> <attr name="fengan_percent" format="float"/> <attr name="fengan_limit_percent" format="float"/> <attr name="fengan_start_color" format="color"/> <attr name="fengan_end_color" format="color"/></declare-styleable></resources>
- fengan_percent:右侧短边占左侧的百分比
- fengan_limit_percent:当滑动到最小的百分比
- fengan_start_color:渐变色的初始颜色(ps:朋友公司效果图是渐变色,当然也可以不需要)
- fengan_end_color:渐变色的终止颜色
DynamicRectangleView.java
package com.fengan.dynamicrectangledemo;import android.content.Context;import android.content.res.TypedArray;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.LinearGradient;import android.graphics.Paint;import android.graphics.Path;import android.graphics.Shader;import android.util.AttributeSet;import android.util.Log;import android.view.View;/** * Created by fengan on 2017/10/11/011. */public class DynamicRectangleView extends View { // Default values private final static int DEFAULT_START_COLOR = Color.parseColor("#88D94600"); private final static int DEFAULT_END_COLOR = Color.parseColor("#D94600"); private final static float DEFAULT_PERCENT = (float) 0.5;//右边高度占左边高度的百分比 private final static float DEFAULT_LIMIT_PERCENT = (float) 0.2;//最小高度占左边高度的百分比 private Paint mPaint; private float OriginalRightHeight; private float OriginalLeftHeight; private float currentRightHeight; private float currentLeftHeight; private float minHeight; private float maxHeight; private int mStartColor; private int mEndColor; private float mPercent; private float mLimitPercent; private Path mPath; public DynamicRectangleView(Context context) { this(context, null); } public DynamicRectangleView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public DynamicRectangleView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); // Retrieve attributes from xml final TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.DynamicRectangleView); try { mPercent = typedArray.getFloat(R.styleable.DynamicRectangleView_fengan_percent, DEFAULT_PERCENT); mLimitPercent = typedArray.getFloat(R.styleable.DynamicRectangleView_fengan_percent, DEFAULT_LIMIT_PERCENT); mStartColor = typedArray.getColor(R.styleable.DynamicRectangleView_fengan_start_color, DEFAULT_START_COLOR); mEndColor = typedArray.getColor(R.styleable.DynamicRectangleView_fengan_end_color, DEFAULT_END_COLOR); } finally { typedArray.recycle(); } initView(context); } private void initView(Context context) { mPaint = new Paint(); mPath = new Path(); mPaint.setAntiAlias(true);// mPaint.setColor(Color.RED);//纯色 } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); OriginalLeftHeight = getMeasuredHeight(); OriginalRightHeight = getMeasuredHeight()*mPercent; minHeight = getMeasuredHeight() *mLimitPercent; maxHeight = OriginalRightHeight; //设置当前高度 currentRightHeight = OriginalRightHeight; currentLeftHeight = OriginalLeftHeight; // LinearGradient 第一个参数第二个参数为 起始位置x,y 三四参数为终点位置x,y。 // 如果x不变则为y轴渐变, y不变则为x轴渐变 // 第五个参数为颜色渐变,此处为红色渐变为绿色 // 第七个参数为渐变次数,可repeat Shader mShader = new LinearGradient(0, 0, maxHeight, maxHeight, new int[]{mStartColor, mEndColor}, null, Shader.TileMode.CLAMP); // Shader.TileMode三种模式 // REPEAT:沿着渐变方向循环重复 // CLAMP:如果在预先定义的范围外画的话,就重复边界的颜色 // MIRROR:与REPEAT一样都是循环重复,但这个会对称重复 mPaint.setShader(mShader);// 用Shader中定义定义的颜色来话 } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); mPath.reset(); mPath.moveTo(0, 0); mPath.lineTo(getMeasuredWidth(), 0); mPath.lineTo(getMeasuredWidth(), currentRightHeight); mPath.lineTo(0, currentLeftHeight); mPath.close(); canvas.drawPath(mPath, mPaint); } public void setPercent(float percent) { Log.e("fengan", "percent=" + percent); currentRightHeight = OriginalRightHeight * (1 - percent); currentLeftHeight = OriginalLeftHeight * (1 - percent); if (currentLeftHeight < minHeight) { currentLeftHeight = minHeight; } if (currentRightHeight < minHeight) { currentRightHeight = minHeight; } postInvalidate(); }}
github移步:
https://github.com/itfengan/DynamicRectangleView
阅读全文
0 0
- 随滑动改变的动态矩形背景
- 动态改变LinearLayout的背景
- 动态改变Gridview单元格的背景颜色
- 动态改变 图片的背景颜色
- 滑动改变ViewPager背景颜色
- 实现背景颜色随着ScrollView滑动改变的ActionBar
- 实现背景颜色随着ScrollView滑动改变的ActionBar
- 动态改变table 背景颜色
- 滑动ScrollView,改变搜索栏背景,透明
- 在程序中动态改变控件的背景颜色
- 改变对话框的背景
- 改变tableView的背景
- Tabhost漂亮的自定义实现(背景随着选项卡滑动改变)
- GDI:捕捉鼠标,实时改变矩形背景颜色。
- SCC3实现文字背景动态滑动
- php动态改变选项卡背景
- android LinearLayout 单击动态改变背景
- PB 动态改变菜单背景颜色
- Android侧滑菜单 仿QQ 百度贴吧 侧滑菜单 自带动画
- 输出日志到控制台和文件(Java项目)
- Android 对象序列化 Java中实现Serializable序列化与Android特有的实现Parceable接口序列化操作
- 数据结构 P36-37 算法实现 双向循环链表的插入与删除
- HttpCore和HttpClient
- 随滑动改变的动态矩形背景
- java小程序——检测密码
- systemtap安装
- 电容器“通交流、隔直流”的正确理解第一期
- 学习笔记41-寻找二叉树最近公共结点
- 错题
- 菜单导航栏总结
- vue踩坑系列——slot
- JS(history,location的使用)返回上一页以及返回上一页并刷新