Texto para marquesina dinámicamente
¿Es posible agregar texto de la codificación java de una vista de lista a scroll de marquesina en Android. Si es así, por favor, hágamelo saber cómo?
Si es necesario, publicaré el código utilizado. Éste era el XML para el listview usado es como sigue
- Los atributos de estilo no funcionan en las etiquetas de combinación
- Android: incluye un xml en otro xml
- Agregar un salto de línea en una posición determinada, sólo si es necesario
- Cambiar programaticamente el color de la forma en la lista de capas
- Diseño XML de Android para todos los dispositivos (pequeño / normal / grande / XLarge, etc.)
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" > <LinearLayout android:id="@+id/linearLayout1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > </LinearLayout> <ListView android:id="@+id/audiolist_listView" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_gravity="bottom" android:layout_weight="1" android:background="@drawable/backgroundimg" android:divider="@drawable/gradient" android:dividerHeight="1dp" android:scrollbars="vertical" > </ListView> </LinearLayout>
La clase java para listview es la siguiente
public class Audiovediolist extends Activity implements OnItemClickListener { private ListView audioList; private Intent frmHome; private ArrayList<HashMap<String, String>> dataList; private HashMap<String, String> map; private HashMap<String, String> data; private int Screen_Id; private AdView adView; String name; String mSign[] = { "Aries-Mesam", "Taurus-Vrushabham", "Gemini-Midhunam", "Cancer-Karkatakam", "Leo-Simham", "Virgo-Kanya", "Libra-Tula", "Scorpio-Vruchikam", "Sagittarius-Dhanussu", "Capricorn-Makaram", "Aquarius-Kumbham", "Pisces-Meenam" }; Integer mImages[] = { R.drawable.meshamu, R.drawable.vrushabhamu, R.drawable.medhunam, R.drawable.karkatakam, R.drawable.simham, R.drawable.kanya, R.drawable.tula, R.drawable.vruchikam, R.drawable.dhanussu, R.drawable.makaramu, R.drawable.kumbhamu, R.drawable.meenamu }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_RIGHT_ICON); setContentView(R.layout.list); frmHome = getIntent(); getIntentValues(); initUI(); setUI(); uiListener(); } private void initUI() { audioList = (ListView) findViewById(R.id.audiolist_listView); dataList = new ArrayList<HashMap<String, String>>(); adView = new AdView(this, AdSize.SMART_BANNER, "a150b89c23af3b2"); LinearLayout layout = (LinearLayout) findViewById(R.id.linearLayout1); layout.setGravity(Gravity.TOP); layout.addView(adView); adView.loadAd(new AdRequest()); } private void uiListener() { audioList.setOnItemClickListener(this); } private void getIntentValues() { String id = frmHome.getStringExtra("Activity_Id"); Screen_Id = Integer.parseInt(id); if (Screen_Id == 1) { getWindow().setFeatureDrawableResource(Window.FEATURE_RIGHT_ICON, R.drawable.audioo); this.setTitle(getResources().getString(R.string.audio)); this.setTitleColor(getResources().getColor(R.color.Beige)); } else { this.setTitle(getResources().getString(R.string.video)); this.setTitleColor(getResources().getColor(R.color.Beige)); getWindow().setFeatureDrawableResource(Window.FEATURE_RIGHT_ICON, R.drawable.videoo); } } private void setAdapter() { SimpleAdapter adapter = new SimpleAdapter(this, dataList, R.layout.list_row, new String[] { "Image", "text" }, new int[] { R.id.audiolist_row_img, R.id.audiolist_row_tv }); audioList.setAdapter(adapter); } private void setUI() { for (int a = 0; a <= 11; a++) { map = new HashMap<String, String>(); map.put("Image", "" + mImages[a]); map.put("text", mSign[a]); dataList.add(map); map = null; } } @Override protected void onStart() { super.onStart(); setAdapter(); } @Override public void onBackPressed() { super.onBackPressed(); System.gc(); } @Override protected void onDestroy() { super.onDestroy(); adView.destroy(); } /* * private class NextTask extends AsyncTask<Void,Void,Void> { ProgressDialog * progressDailog = new ProgressDialog(Audiovediolist.this); * * @Override protected void onPreExecute() { super.onPreExecute(); * progressDailog.setTitle("Please Wait"); * progressDailog.setMessage("URL Data Loading ..."); * progressDailog.setProgressStyle(ProgressDialog.STYLE_SPINNER); * progressDailog.setCancelable(true); progressDailog.show(); } * * @SuppressWarnings("static-access") * * @Override protected Void doInBackground(Void... params) { return null; } * * @Override protected void onPostExecute(Void result) { * progressDailog.dismiss(); } } */ @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { data = dataList.get(position); //FinalConstants.AUDIO_VIDEO = "list"; try { NetWorkCheck netWork = new NetWorkCheck(); if (netWork.isNetWorkConnection(this)) { if (Screen_Id == 1) { // new NextTask().execute(); Intent audioInt=new Intent(getApplicationContext(),AudioView.class); audioInt.setType(data.get("text")); startActivity(audioInt); } else if (Screen_Id == 2) { Intent vedioInt = new Intent(this, VideoPlayActivity.class); vedioInt.setType(data.get("text")); startActivity(vedioInt); } } else { netWork.alert(); } } catch (Exception e) { e.printStackTrace(); Toast.makeText(this, "Problem while ListItemClick", Toast.LENGTH_SHORT).show(); } } }
El código para el reproductor de audio donde necesito el texto seleccionado para desplazarse es el siguiente
public class AudioView extends Activity implements OnClickListener { private MediaPlayer mMediaPlayer; private ImageView mPlay; private ImageView mPause; private ImageView mBack; private ImageView mFar; private ProgressBar myProgressBar; private boolean boolFlag = false; private boolean isPausedInCall = false; private String url; private TelephonyManager mTelephoneMgr; private NotificationManager mNotificationManager; private int SIMPLE_NOTFICATION_ID; private TextView tv; // private boolean serviceRunning; Notification notifyDetails; private AdView adView; @SuppressWarnings("deprecation") @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().requestFeature(Window.FEATURE_INDETERMINATE_PROGRESS); setContentView(R.layout.marquee); Toast.makeText(this,"please wait.........",Toast.LENGTH_LONG).show(); url=getIntent().getType(); initUI(); uiListener(); mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); notifyDetails = new Notification(R.drawable.mulug_icon, url, System.currentTimeMillis()); mTelephoneMgr = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); if (mTelephoneMgr != null) { mTelephoneMgr.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE); } /*if(FinalConstants.AUDIO_VIDEO=="listitem"){ LoginProgress task = new LoginProgress(); task.applicationContext = AudioView.this; task.execute(); }*/ } private void initUI() { tv = (TextView) findViewById(R.id.text); mBack = (ImageView) findViewById(R.id.back); mPlay = (ImageView) findViewById(R.id.play); mPause = (ImageView) findViewById(R.id.pause); mFar = (ImageView) findViewById(R.id.fwd); myProgressBar = (ProgressBar) findViewById(R.id.progressbar_Horizontal); myProgressBar.setProgressDrawable(getResources().getDrawable( R.drawable.green_progress)); myProgressBar.setProgress(0); adView = new AdView(this, AdSize.BANNER, "a150b89c23af3b2"); LinearLayout layout = (LinearLayout) findViewById(R.id.linearLayout1); layout.setGravity(Gravity.TOP); layout.addView(adView); adView.loadAd(new AdRequest()); tv.setText(url + "more Deails Click on www.mulugu.com"); tv.setSelected(true); } private void uiListener() { mPlay.setOnClickListener(this); mPlay.setOnClickListener(this); mPause.setOnClickListener(this); mPause.setVisibility(android.view.View.INVISIBLE); mBack.setOnClickListener(this); mFar.setOnClickListener(this); } private Thread myThread = new Thread() { public void run() { while (mMediaPlayer.getCurrentPosition() < mMediaPlayer .getDuration()) { try { myProgressBar .setProgress(mMediaPlayer.getCurrentPosition()); } catch (Throwable t) { } } } }; @Override protected void onStart() { super.onStart(); this.setProgressBarIndeterminateVisibility(true); try { if (boolFlag == false) { System.out.println(FinalConstants.URL + "mobile-audio/" + url+ ".mp3"); mMediaPlayer = MediaPlayer.create( this, Uri.parse(FinalConstants.URL + "mobile-audio/" + url + ".mp3")); } myProgressBar.setMax(mMediaPlayer.getDuration()); } catch (Exception e) { Toast.makeText(getApplicationContext(), "Data not available", Toast.LENGTH_SHORT).show(); Log.e("ERRORS", "Data Not Exist in that Url..."); super.onBackPressed(); e.printStackTrace(); } } @SuppressLint("NewApi") @Override public void onBackPressed() { super.onBackPressed(); mMediaPlayer.stop(); // myThread.stop(); mNotificationManager.cancel(SIMPLE_NOTFICATION_ID); System.gc(); } @Override protected void onDestroy() { adView.destroy(); super.onDestroy(); System.gc(); } public PhoneStateListener phoneStateListener = new PhoneStateListener() { @Override public void onCallStateChanged(int state, String incomingNumber) { if (state == TelephonyManager.CALL_STATE_RINGING) { System.out.println("ringing state"); if (mMediaPlayer != null) { pauseMedia(); isPausedInCall = true; } notificationShow(); } if (state == TelephonyManager.CALL_STATE_IDLE) { System.out.println("callState Idle"); if (mMediaPlayer != null) { if (isPausedInCall) { isPausedInCall = false; playMedia(); } } } if (state == TelephonyManager.CALL_STATE_OFFHOOK) { } super.onCallStateChanged(state, incomingNumber); } }; private void pauseMedia() { mMediaPlayer.pause(); changePlayerIcons(false); } private void playMedia() { mMediaPlayer.start(); changePlayerIcons(true); } public void onClick(View v) { switch (v.getId()) { case R.id.play: if (!boolFlag) { try { notificationShow(); mMediaPlayer.setLooping(false); mMediaPlayer.prepareAsync(); } catch (Exception e) { Toast.makeText(this, "preparing", Toast.LENGTH_SHORT) .show(); } boolFlag = true; mMediaPlayer.start(); myThread.start(); } else { notificationShow(); mMediaPlayer.getCurrentPosition(); mMediaPlayer.start(); } changePlayerIcons(true); myProgressBar.setProgress(mMediaPlayer.getCurrentPosition()); mMediaPlayer.setOnCompletionListener(new OnCompletionListener() { @Override public void onCompletion(MediaPlayer arg0) { changePlayerIcons(false); myProgressBar.setProgress(0); onStart(); } }); mMediaPlayer.setOnPreparedListener(new OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { } }); break; case R.id.pause: mMediaPlayer.pause(); mPlay.setVisibility(android.view.View.VISIBLE); mPause.setVisibility(android.view.View.INVISIBLE); break; case R.id.back: int dur = mMediaPlayer.getCurrentPosition(); int pos = (dur > 10000 ? dur - 5000 : 0); mMediaPlayer.seekTo(pos); break; case R.id.fwd: int curpos = mMediaPlayer.getCurrentPosition(); int dur2 = mMediaPlayer.getDuration(); int pos2 = (curpos + 5000 > dur2 ? dur2 : curpos + 5000); mMediaPlayer.seekTo(pos2); break; } } @SuppressWarnings("deprecation") private void notificationShow() { Context context = getApplicationContext(); CharSequence contentTitle = "Mulugu Running"; CharSequence contentText = url + " Weekly Predictions"; Intent notifyIntent = new Intent(AudioView.this, AudioView.class); PendingIntent intent = PendingIntent.getActivity(AudioView.this, 0, notifyIntent, android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP); notifyDetails.setLatestEventInfo(context, contentTitle, contentText, intent); mNotificationManager.notify(SIMPLE_NOTFICATION_ID, notifyDetails); } private void changePlayerIcons(boolean b) { if (b) { mPlay.setVisibility(android.view.View.INVISIBLE); mPause.setVisibility(android.view.View.VISIBLE); } else { mPlay.setVisibility(android.view.View.VISIBLE); mPause.setVisibility(android.view.View.INVISIBLE); } } /*public class LoginProgress extends AsyncTask<Void, Void, Void> { private ProgressDialog dialog; protected Context applicationContext; @Override protected void onPostExecute(Void result) { // TODO Auto-generated method stub super.onPostExecute(result); this.dialog.dismiss(); } @Override protected void onPreExecute() { this.dialog = ProgressDialog.show(applicationContext, "Data Loading", "Loading .....", true); } @Override protected Void doInBackground(Void... params) { LoadUrl(); return null; } private void LoadUrl() { mMediaPlayer = new MediaPlayer(); mMediaPlayer.reset(); try { mMediaPlayer.setDataSource(AudioView.this,Uri.parse(FinalConstants.URL + "mobile-audio/" + getIntent().getType()+ ".mp3")); mMediaPlayer.setLooping(false); // Set looping mMediaPlayer.prepare(); myProgressBar.setMax(mMediaPlayer.getDuration()); } catch (Exception e) { e.printStackTrace(); } } }*/ }
- Android scrollview ocultando el contenido superior en el diseño
- ¿Cómo lograr la interfaz de usuario de Android como este diseño de imagen? Acerca de android: clipChildren
- ¿Por qué usamos xml?
- ¿Es posible acortar los nombres de vista personalizada?
- ¿Qué significan los valores para android: backgroundDimAmount?
- Disposición de Android con vista a la derecha que ocupa un espacio preestablecido y visualiza en las escalas de la izquierda para llenar el resto de la pantalla hasta cierto límite
- Línea vertical XML
- Diseño personalizado EditText
Si usted necesita mover el texto alrededor, quizá esto ayudará:
http://developer.android.com/guide/topics/resources/animation-resource.html#translate-element
Si tienes un TextView con un texto demasiado grande y quieres que se mueva para que la gente pueda leer todo, prueba android:ellipsize="marquee"
en el archivo .xml o en el código Java: textView.setEllipsize(TextUtils.TruncateAt.MARQUEE);
Si las bibliotecas de Android no es suficiente, siempre se puede utilizar el java a través de la codificación. Cree una clase de subprocesos que obtenga las vistas y cambie las condiciones a lo largo del tiempo. Puede crear una intención de llamar a esa clase.
Puede utilizar el TextSwitcher y aplicar la animación en él.
Intente abajo el código:
public class TextSwitcherActivity extends Activity implements ViewSwitcher.ViewFactory, View.OnClickListener { private TextSwitcher m_switcher; private Button m_nextButton; private int m_counter = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); m_switcher = (TextSwitcher) findViewById(R.id.tsSwitcher); m_switcher.setFactory(this); Animation in = AnimationUtils.loadAnimation(this, android.R.anim.fade_in); Animation out = AnimationUtils.loadAnimation(this, android.R.anim.fade_out); m_switcher.setInAnimation(in); m_switcher.setOutAnimation(out); m_nextButton = (Button) findViewById(R.id.next); m_nextButton.setOnClickListener(this); updateCounter(); } /** * Update counter value */ public void onClick(View v) { m_counter++; updateCounter(); } /** * Set text on textswitcher */ private void updateCounter() { m_switcher.setText(String.valueOf(m_counter)); } public View makeView() { TextView t = new TextView(this); t.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL); t.setTextSize(36); return t; }
Puede definir sus propias animaciones para obtener el efecto de marco.
Aquí está el ejemplo
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:id="@+id/mywidget" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:lines="1" android:ellipsize="marquee" android:fadingEdge="horizontal" android:marqueeRepeatLimit="marquee_forever" android:scrollHorizontally="true" android:textColor="#ff4500" android:text="Simple application that shows how to use marquee, with a long text" />
En java (si está usando un Listview y vinculando un adaptador, entonces en getview cuando u infle Layout y su componente de vista, establezca el indicador seleccionado en true a su TextView).
tv = (TextView) this.findViewById(R.id.tv); tv.setSelected(true);
- Android WebViewClient onReceivedError no se llama para un error 404
- Barra de navegación de Android superpuesta a mi vista