Je dois accéder à une toile que j'ai créée à partir d'une autre classe.Toile d'accès Android de classe différente
J'ai donc une classe qui s'étend LinearLayout
arc de dessin.
Maintenant à partir de main activity
J'ai besoin d'accéder à cette toile sur laquelle elle est dessinée et de la redessiner. Idéalement seulement quelques parties de celui-ci.
Voici quelques codes dépouillés pour principal.
ArchProgressBar.java
(avec toile)
public class ArchProgressBar extends LinearLayout {
public ArchProgressBar(Context context, AttributeSet attrs) {
private void init(Context context) {
this.setWillNotDraw(false);
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.arch_progress_bar, this, true);
this.postInvalidate();
}
static void drawMeCircle(int aka) {
}
@Override
public void onDraw(Canvas canvas) {
int mPaintHex = 0xFFFFFFFF;
int mPaintColor = Color.argb(100, Color.red(mPaintHex), Color.green(mPaintHex), Color.blue(mPaintHex));
float left = 295;
float top = 712;
float right = 788;
float bottom = 1208;
Paint mPaintBackground = new Paint();
mPaintBackground.setAntiAlias(true);
mPaintBackground.setStyle(Paint.Style.STROKE);
mPaintBackground.setStrokeWidth(13);
mPaintBackground.setColor(mPaintColor);
RectF mRectF = new RectF(left, top, right, bottom);
// THIS IS BACKGROUND LINE! draw background line
canvas.drawArc(mRectF, START_ANGLE, ARCH_LENGTH, false, mPaintBackground);
int mHourHex = 0xFF00FF00;
int mHourColor = Color.argb(255, Color.red(mHourHex), Color.green(mHourHex), Color.blue(mHourHex));
Paint mPaintHours = new Paint();
mPaintHours.setAntiAlias(true);
mPaintHours.setStyle(Paint.Style.STROKE);
mPaintHours.setStrokeWidth(13);
mPaintHours.setColor(mHourColor);
RectF mRectH = new RectF(left, top, right, bottom);
// THIS IS HOUR LINE!draw hour line
Calendar hCal = Calendar.getInstance();
int hHour = hCal.get(Calendar.HOUR);
if(hHour != 0) {
for(int i=0; i<hHour-1; i++){
canvas.drawArc(mRectH, START_ANGLE + ARCH_LENGTH + (i*30) +2, ARCH_LENGTH, false, mPaintHours);
}
}
}
HomeActivity.java
activité principale pour l'application (étend Activity
)
public class HomeActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
IntentFilter mIntentFilter = new IntentFilter();
mIntentFilter.addAction(Intent.ACTION_TIME_TICK);
mIntentFilter.addAction(Intent.ACTION_TIMEZONE_CHANGED);
mIntentFilter.addAction(Intent.ACTION_TIME_CHANGED);
registerReceiver(m_timeChangedReceiver, mIntentFilter);
}
//clock thing start
private final BroadcastReceiver m_timeChangedReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
Calendar hCal = Calendar.getInstance();
int hHour = hCal.get(Calendar.HOUR);
ArchProgressBar.drawMeCircle(1);
}
};
public void showApps(View v){
Intent i = new Intent(this, AppsListActivity.class);
startActivity(i);
}
}
maintenant Quand BroadcastRecieved
est déclenchée, je veux accéder à la toile de ArchProgressBar
, supprimer le hour line
(ou toute chose si ce n'est pas possible de supprimer seulement cette partie) et redessiner quelque chose de nouveau dessus.
si vous êtes errant quoi avec drawMeCircle
. C'est juste quelque chose que je jouais avec. inclus pour montrer comment je pense que cela doit fonctionner.
Où inscrivez-vous le BroadcastReceiver? –
@ Code-Apprentice J'ai mis à jour le code – CBeTJlu4ok
Copie possible de [Comment mettre à jour l'interface utilisateur dans un BroadcastReceiver] (http://stackoverflow.com/questions/14643385/how-to-update-ui-in-a-broadcastreceiver) –