上下滾動自定義廣告條ViewGroup

工作日誌記錄,記錄本文的初衷是用來拋磚引玉,希望對自己以後有用,對各位看官也有用。。。

慣例上圖:

上代碼:

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()就行了。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章