カスタムViewインプリメンテーションレンダリング
5627 ワード
読む前にAndroidカスタムグラフ:ChartView
必要:
上記の例では、テストデータを修正した後、得られたView画像は次のようになります.
縦座標7.45以上5.97以下の部分は赤、7.45と6.43の間は緑、6.18と6.43の間は黄色で、効果は以下の通りです.
カスタムViewを知っている人は、ある点から別の点に描く過程で、Paintとcanvasを通じて知っているはずです.drawLine()は、異なる色の線を描くのは容易ではありません.2つの異なる線に分かれていると、どのように描くかの複雑さが増すに違いありません.では、私たちはどのようにして下図の効果を作りますか.
1、レンダリングバックグラウンドのRectを初期化する
2、背景ペンをレンダリングする
3、setShader()の設定に必要なShader
4、レンダリングの背景を描く
5、表示されたデータを描画する–ここは曲線です
6、合成モードPorterDuffを設定.Mode.DST_IN
具体的なPorterDuff.Mode.DST_INは2つのレイヤーを取るために交差を描画します.下段を表示ここで下段の背景色を取ります.具体的にsetXfermodeについての理解は、以下のリンクandroid PorterDuffXfermode,PorterDuffを参照することができる.Modeの使用およびPorter-Duffルールの詳細
7、レンダリング後のグラフを描く
以上の手順でグラフィックのレンダリング描画が完了し、具体的なコードがGithubに更新されました.
今期の最適化内容:
1、クリック、スライドイベントを追加し、クリックとスライドで現在の点の具体的な情報を表示する.2、スクリーンの最適化.3、外領域をクリックして現在の情報表示をキャンセルする.4、現在の描画色をレンダリングします.
以下は最新のダウンロードリンクです.
Githubダウンロードアドレス:https://github.com/JackWaiting/ChartView
必要:
上記の例では、テストデータを修正した後、得られたView画像は次のようになります.
縦座標7.45以上5.97以下の部分は赤、7.45と6.43の間は緑、6.18と6.43の間は黄色で、効果は以下の通りです.
カスタムViewを知っている人は、ある点から別の点に描く過程で、Paintとcanvasを通じて知っているはずです.drawLine()は、異なる色の線を描くのは容易ではありません.2つの異なる線に分かれていると、どのように描くかの複雑さが増すに違いありません.では、私たちはどのようにして下図の効果を作りますか.
1、レンダリングバックグラウンドのRectを初期化する
private Rect mColorBgRect = new Rect(0, mTopPadding, w, mColEndY);
2、背景ペンをレンダリングする
//
public void shaderColorBgPaint(Rect rect) {
LinearGradient linearGradient = new LinearGradient(rect.left, rect.top, rect.left, rect.bottom, getShaderColor(), getShaderPosition(), Shader.TileMode.MIRROR);
mColorBgPaint.setShader(linearGradient);
}
// @COLORS_SHADER LinearGradient
public int[] getShaderColor(){
int[] colors = new int[COLORS_SHADER.length * 2];
for (int i = 0, len = colors.length; i < len ; i+=2) {
colors[i] = COLORS_SHADER[i/2];
colors[i+1] = COLORS_SHADER[i/2];
}
return colors;
}
// @RATIOS_SHADER LinearGradient
public float[] getShaderPosition() {
float[] position = new float[COLORS_SHADER.length * 2];
position[0] = JOIN_SHADER;
position[1] = RATIOS_SHADER[0] - JOIN_SHADER;
for (int i = 1, len = RATIOS_SHADER.length; i < len ; i++) {
position[i*2] = RATIOS_SHADER[i-1] + JOIN_SHADER;
position[i*2+1] = RATIOS_SHADER[i] - JOIN_SHADER;
}
return position;
}
3、setShader()の設定に必要なShader
mColorBgPaint.setShader(linearGradient);
4、レンダリングの背景を描く
//
Bitmap tagBitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888);
Canvas tagCanvas = new Canvas(tagBitmap);
tagCanvas.drawRect(mColorBgRect, mColorBgPaint);
5、表示されたデータを描画する–ここは曲線です
//
Bitmap curveBitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888);
Canvas curveCanvas = new Canvas(curveBitmap);
drawCurve(curveCanvas); // ,
6、合成モードPorterDuffを設定.Mode.DST_IN
Paint paint = new Paint();
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN)); //
tagCanvas.drawBitmap(curveBitmap, mMatrix, paint);
具体的なPorterDuff.Mode.DST_INは2つのレイヤーを取るために交差を描画します.下段を表示ここで下段の背景色を取ります.具体的にsetXfermodeについての理解は、以下のリンクandroid PorterDuffXfermode,PorterDuffを参照することができる.Modeの使用およびPorter-Duffルールの詳細
7、レンダリング後のグラフを描く
//
private void drawBeautifulCurve(Canvas canvas) {
if (mCurveBitmap == null) {
mCurveBitmap = getBeautfulCurve();
}
canvas.drawBitmap(mCurveBitmap, 0, 0, null);
}
以上の手順でグラフィックのレンダリング描画が完了し、具体的なコードがGithubに更新されました.
今期の最適化内容:
1、クリック、スライドイベントを追加し、クリックとスライドで現在の点の具体的な情報を表示する.2、スクリーンの最適化.3、外領域をクリックして現在の情報表示をキャンセルする.4、現在の描画色をレンダリングします.
以下は最新のダウンロードリンクです.
Githubダウンロードアドレス:https://github.com/JackWaiting/ChartView