工作日誌記錄,記錄本文的初衷是用來拋磚引玉,希望對自己以後有用,對各位看官也有用。。。
慣例上圖:
上代碼:
package com.xuganwen.testhichart;
import android.animation.ValueAnimator;
import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
/**
* 文件描述:
* 作者:徐幹穩
* 創建時間:2020/1/9
* 更改時間:2020/1/9
* 版本號:1.0
*/
public class AdvertisementView<T extends View> extends ViewGroup {
private int childCount;
float value;
public AdvertisementView(Context context) {
super(context);
}
public AdvertisementView(Context context, AttributeSet attrs) {
super(context, attrs);
ValueAnimator valueAnimator = new ValueAnimator();
valueAnimator.setFloatValues(0,0,1,1,2,2);
valueAnimator.setDuration(7000);
valueAnimator.setRepeatCount(ValueAnimator.INFINITE);
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
value = (float) animation.getAnimatedValue();
scrollTo(0,(int)(getMeasuredHeight()*value));
}
});
valueAnimator.start();
}
public AdvertisementView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
childCount = getChildCount();
for (int i = 0; i < childCount; i++) {
measureChild(getChildAt(i), widthMeasureSpec, heightMeasureSpec);
}
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
for (int i = 0; i < childCount; i++) {
View child = getChildAt(i);
if (null != child) {
child.layout(l, getMeasuredHeight() * i, r, getMeasuredHeight() * (i + 1));
}
}
}
}
MainActivity.java中使用如下:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/*webview = findViewById(R.id.webview);
btn=findViewById(R.id.btn);
btn.setOnClickListener(this);
initWebView();*/
roundview = findViewById(R.id.roundview);
roundview.setPriority("hehe",80f, RoundRectView.RadiusOrientation.RIGHT_TO_LEFT);
advertise= findViewById(R.id.advertise);
for (int i=0;i<3;i++){
TextView textView=new TextView(this);
textView.setText("我擦擦擦擦擦擦擦擦"+i);
advertise.addView(textView);
}
}
雖然這裏只使用了textview作爲填充控件,但其實可以用大部分的控件作爲子控件 。這個自定義viewgroup實際上最關鍵的地方就是onlayout,就是將子控件擺放好,然後執行動畫,使用scrollto()就行了。