2017-02-19 32 views
1

Я сделал приложение для Android, которое воспроизводит звуки при нажатии кнопки. Эти звуки также могут быть переданы через мессенджер. Все эти кнопки (их внешний вид и позиция) указаны в файле activity_main.xml. Проблема в том, что когда я прокручиваю вверх или вниз в своем приложении, это выглядит ужасно, потому что это негласно, и мое приложение кажется лагги.Прокрутка в моем приложении действительно негладкая

Вот мой код с некоторыми кнопками и imageviews, например

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/activity_main" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin""> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/r1"> 

    <Button 
     android:text="@string/sound1" 
     android:layout_marginTop="33dp" 
     android:id="@+id/sound1" 
     android:layout_width="210dp" 
     android:background="@drawable/backgroundbuttons" 
     android:layout_height="50dp" 
     android:layout_alignRight="@+id/sound3" 
     android:layout_alignEnd="@+id/sound3" 
     android:textSize="13sp" /> 

    <Button 
     android:text="@string/sound2" 
     android:layout_width="210dp" 
     android:layout_height="50dp" 
     android:layout_marginTop="8dp" 
     android:id="@+id/sound2" 
     android:background="@drawable/backgroundbuttons" 
     android:layout_below="@+id/sound1" 
     android:layout_alignLeft="@+id/sound1" 
     android:layout_alignStart="@+id/sound1" 
     android:textSize="13sp" /> 

    <ImageView 
     android:layout_width="50dp" 
     android:layout_height="50dp" 
     app:srcCompat="@drawable/sharebutton" 
     android:id="@+id/share_button1" 
     android:layout_alignBottom="@+id/sound1" 
     android:layout_toRightOf="@+id/sound1" 
     android:layout_toEndOf="@+id/sound1" /> 

    <ImageView 
     android:layout_width="50dp" 
     android:layout_height="50dp" 
     app:srcCompat="@drawable/sharebutton" 
     android:id="@+id/share_button2" 
     android:layout_alignBottom="@+id/sound2" 
     android:layout_toRightOf="@+id/sound2" 
     android:layout_toEndOf="@+id/sound2" /> 

Есть в общей сложности 25 кнопок и 25 imageviews в моем activity_main, которые выглядят, как это. Все эти изображения основаны на одном файле (sharebutton.jpg).

EDIT: Основной класс активность:

public class MainActivity extends AppCompatActivity { 

private MediaPlayer mp; 

private MessengerThreadParams mThreadParams; 
private boolean mPicking; 

private static final int REQUEST_CODE_SHARE_TO_MESSENGER = 1; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Button s1 = (Button) findViewById(R.id.sound1); 
    Button s2 = (Button) findViewById(R.id.sound2); 
    findViewById(R.id.share_button1).setOnClickListener(new View.OnClickListener(){ 

     @Override 
     public void onClick(View v){ 
      onMessengerButtonClicked1(); 
     } 

    }); 

    findViewById(R.id.share_button2).setOnClickListener(new View.OnClickListener(){ 

     @Override 
     public void onClick(View v){ 
      onMessengerButtonClicked2(); 
     } 

    }); 

    Intent intent = getIntent(); 
    if (Intent.ACTION_PICK.equals(intent.getAction())) { 
     mThreadParams = MessengerUtils.getMessengerThreadParamsForIntent(intent); 
     mPicking = true; 
    } 

    s1.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      onPause(); 
      mp = MediaPlayer.create(MainActivity.this, R.raw.a1); 
      mp.start(); 
     } 

    }); 


    s2.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      onPause(); 
      mp = MediaPlayer.create(MainActivity.this, R.raw.a2); 
      mp.start(); 
     } 

private void onMessengerButtonClicked1() { 
    // The URI can reference a file://, content://, or android.resource. 
    Uri uri = 
      Uri.parse("android.resource://" + getPackageName()+ "/raw/" +R.raw.a1); 

    ShareToMessengerParams shareToMessengerParams = 
      ShareToMessengerParams.newBuilder(uri, "audio/mpeg") 
        .setMetaData("{ \"audio\" : \"a1\" }") 
        .build(); 

if (mPicking) { 
    MessengerUtils.finishShareToMessenger(this, shareToMessengerParams); 
    } else { 
    MessengerUtils.shareToMessenger(
      this, 
      REQUEST_CODE_SHARE_TO_MESSENGER, 
      shareToMessengerParams); 
    } 
} 
private void onMessengerButtonClicked2() { 
    Uri uri = 
      Uri.parse("android.resource://" + getPackageName()+ "/raw/" +R.raw.a2); 

    ShareToMessengerParams shareToMessengerParams = 
      ShareToMessengerParams.newBuilder(uri, "audio/mpeg") 
        .setMetaData("{ \"audio\" : \"a2\" }") 
        .build(); 

    if (mPicking) { 
     MessengerUtils.finishShareToMessenger(this, shareToMessengerParams); 
    } else { 
     MessengerUtils.shareToMessenger(
       this, 
       REQUEST_CODE_SHARE_TO_MESSENGER, 
       shareToMessengerParams); 
    } 
} 
protected void onPause() { 
    super.onPause(); 
    if (mp != null) { 
     mp.stop(); 
     mp.release(); 
     mp = null; 
    } 
} 
+0

на эмуляторе? или на реальном мобильном устройстве? эмулятор медленный. запустите его с более высокой памятью – user7568042

+0

На реальном мобильном устройстве я не использую эмулятор, потому что мне нужно использовать кнопки-мессенджеры, чтобы проверить, работает ли они – Kyuubi

+1

, я бы сказал, что код нужно посмотреть. xml не предоставляет нам много информации, и если ваш код в вашей деятельности не является проблемой. это ваше устройство или соединение, если оно извлекает данные из сети. – user7568042

ответ

0

https://developer.android.com/guide/components/activities/activity-lifecycle.html

Выше в общих чертах, которые могут быть использованы в широких областях, в том числе ситуации.

Что касается вашего кода, вы можете осуществить следующие действия:

@Override 
    public void onResume() { 
     mp.onResume(); 
     // Setup the player 
     mp.resume(); 
    } 
@Override 
    public void onDestroy() { 
     if(mp != null) { 
      mp.release(); 
     } 
     super.onDestroy(); 
    } 
s1.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if(mp != null) 

       { 
        mp.stop(); 
        mp.release(); 
       } 
       finish(); 
      } 
     }); 
} 

Если это помогает, журналы использовать, чтобы помочь вам увидеть жизненный цикл

try{ 
    if(mp !=null && mp.isPlaying()){ 
     Log.d("TAG------->", "player is running"); 
     mp.stop(); 
     Log.d("Tag------->", "player is stopped"); 
     mp.release(); 
     Log.d("TAG------->", "player is released"); 
    } 
}catch(Exception e){ 
    //Throw the error 
} 
+0

Благодарим за внимание! Извините за этот вопрос, но я начинаю. Можете ли вы показать мне, что ваш код реализован в моем коде? Единственная причина в том, что, когда я пытаюсь сделать это сам, андроидная студия отмечает 'mp. * OnResume *(); // Установка проигрывателя mp. * Resume *(); 'как ошибка. Кстати, где я могу подключить mp3-файл к кнопке? в моем коде я сделал это с помощью 'mp = MediaPlayer.create (MainActivity.this, R.raw.a1);' где a1 был mp3-файлом. Я был бы очень благодарен, если бы вы могли мне это объяснить. – Kyuubi

+0

Я обнаружил, что загрузка всех файлов на самом деле является причиной того, что мое приложение отсталое, но я до сих пор не знаю, как реализовать свой метод в моем коде. Не могли бы вы мне помочь? – Kyuubi