5

Czy można dodać tekst z kodowania java widoku listy do marquee scroll w systemie Android. Jeśli tak, proszę dać mi znać, w jaki sposób?tekst dla markizy dynamicznie

W razie potrzeby opublikuję użyty kod. To był XML ListView jest następująca

<?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> 

klasy Javy dla ListView jest następujący

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(); 
     } 
    } 
} 

kod do odtwarzacza audio, gdzie muszę tekst wybrany do przewijania jest następująca

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(); 
      } 
     } 
    }*/ 
} 
+0

czy możesz wyjaśnić, czego dokładnie potrzebujesz? Nie wydaje mi się, żeby to uzyskać. –

+0

Potrzebuję dynamicznie pobierać tekst z widoku listy. Załóżmy, że mam widok listy z 12 różnymi nazwami podłączonymi do odtwarzacza audio i chcę wyświetlić nazwę wybraną w namiocie na ekranie odtwarzacza audio. Czy to możliwe. –

+0

Chcesz uzyskać nazwę wyświetlaną na elemencie wybranym przez użytkownika? : $ Czy jesteś bardziej zainteresowany wdrożeniem markizy? –

Odpowiedz

3

Jeśli trzeba przenieść tekst wokół, może to pomoże:

http://developer.android.com/guide/topics/resources/animation-resource.html#translate-element

Jeśli masz TextView z tekstem, który jest zbyt duży i chcesz go do poruszania się więc ludzie mogą przeczytać całość, spróbuj android:ellipsize="marquee" w pliku xml, lub w kodzie Java: textView.setEllipsize(TextUtils.TruncateAt.MARQUEE);

+0

Potrzebuję uzyskać tekst z widoku listy dynamicznie. Załóżmy, że mam widok listy z 12 różnymi nazwami podłączonymi do odtwarzacza audio i chcę wyświetlić nazwę wybraną w namiocie na ekranie odtwarzacza audio. Czy to możliwe. –

+0

Nie potrzebuję animacji –

1

Jeśli biblioteki Android nie są wystarczające, zawsze można użyć kodu Java. Utwórz klasę wątków, która pobiera widoki i zmienia warunki w czasie. Możesz stworzyć intencję, aby zadzwonić do tej klasy.

1

Możesz użyć TextSwitcher i zastosować animację na nim.

Spróbuj poniżej kodu:

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; 
} 

Można zdefiniować własne animacje, aby uzyskać efekt marquee.

0

Oto przykład

<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" /> 

w Javie (Jeśli używasz ListView i wiążące adaptera, a następnie w getview gdy u napompowania układ i jego widoku komponentu, ustawić wybraną flagę true do twojego TextView.)

tv = (TextView) this.findViewById(R.id.tv); 
    tv.setSelected(true); 
+0

Przykro mi, że to tylko dla markizy.Potrzebuję przewijania tekstu wybranego w widoku listy. –

+0

Odpowiedzi od innych deweloperów wydają się odpowiednie dla markizy z wieloma ciekawymi rozwiązaniami. Ale wymaganie to wciąż nie jest wystarczająco jasne. Chciałbyś rzucić trochę światła na to. Podaj nam przykład. Dodaj obraz z niektórymi podpowiedziami lub fragmentami kodu, aby było jasne. Dzięki –

+0

OK, więc powiedz mi, jak wygląda twój widok listy? czy jest to normalny widok listy z samym tekstem, czy jest to widok listy z niestandardowym wierszem? Jeśli jest to prosty listview z ArrayAdapter, to możesz użyć TextView z layoutu i przekazać jego identyfikator, jeśli jest poprawny, możesz użyć powyższego rozwiązania. W każdym razie, powodzenia. –

Powiązane problemy