Fragments
3 つのボタンと 3 つのキャンバス フラグメントを持つ 4つのナビゲーション フラグメントが 1 つあります。のサイズを計算する必要があるため、に描画していlayout
ましFragment
た。onfocuschangedlistener
canvas
view.getViewTreeObserver().addOnGlobalFocusChangeListener(new OnGlobalFocusChangeListener()
{
@Override
public void onGlobalFocusChanged(View oldFocus, View newFocus)
{
//calculate width and height of available space
//instansiate view object
layout.removeAllViews();
layout.addView(view object);
}
});
これは、アプリが初めてロードされたときに正常に機能し、デフォルトでビューをロードしますが、その後、ナビゲーション フラグメントを使用してフラグメント間の切り替えを開始すると、ビューが再描画されることはありません。onglobalfocuschange
別の をロードしても、二度と呼び出されないことがわかりましたFragment
。どうすればこれを達成できますか。提案をお待ちしております。
これは、棒グラフを描画する View クラスです。現在、テストに定数値を使用しています。
public class bargraphClass extends View
{
int startX,startY,stopX,stopY;
int leftSp,bottomSp;
RectF fillRect;
float hrs;
float ppm;
Paint rectBrush=new Paint();
int g1,g2,g3,g4;
public bargraphClass(Context context,int wt,int ht)
{
super(context);
leftSp=wt/5;
bottomSp=ht/20;
startX=leftSp;
startY=0;
stopX=wt;
stopY=ht-bottomSp;
fillRect=new RectF();
g1=5*60;
g2=4*60;
g3=8*60;
g4=6*60;
}
@Override
protected void onDraw(Canvas c)
{
// TODO Auto-generated method stub
int _wt,gap,temp;
super.onDraw(c);
drawAxis(c);
ppm=(float)(stopY-startY)/(24*60);
_wt=stopX-startX;
gap=_wt/9;
temp=(int) (g1*ppm);
fillRect.set(startX+gap, stopY-temp, startX+(gap*2), stopY);
rectBrush.setColor(Color.RED);
rectBrush.setAntiAlias(true);
rectBrush.setAlpha(128);
c.drawRect(fillRect,rectBrush);
temp=(int) (g2*ppm);
fillRect.set(startX+(gap*3), stopY-temp, startX+(gap*4), stopY);
rectBrush.setColor(Color.GREEN);
rectBrush.setAntiAlias(true);
rectBrush.setAlpha(128);
c.drawRect(fillRect,rectBrush);
temp=(int) (g3*ppm);
fillRect.set(startX+(gap*5), stopY-temp, startX+(gap*6), stopY);
rectBrush.setColor(Color.BLUE);
rectBrush.setAntiAlias(true);
rectBrush.setAlpha(128);
c.drawRect(fillRect,rectBrush);
temp=(int) (g4*ppm);
fillRect.set(startX+(gap*7), stopY-temp, startX+(gap*8), stopY);
rectBrush.setColor(Color.MAGENTA);
rectBrush.setAntiAlias(true);
rectBrush.setAlpha(128);
c.drawRect(fillRect,rectBrush);
}
private void setScaleValues()
{
ppm=stopY/(24*60);
}
private void drawAxis(Canvas c)
{
int sp;
String str;
Paint p=new Paint();
p.setColor(Color.DKGRAY);
p.setStrokeWidth(2);
p.setAntiAlias(true);
c.drawLine(startX,startY,startX,stopY, p);
c.drawLine(startX, stopY, stopX, stopY, p);
sp=(stopY-startY)/12;
for(int i=1;i<12;i++)
{
str=String.valueOf(i*2)+" hrs";
c.drawText(str, 0, ht-(i*sp)-bottomSp,p);
}
}
}