使用Fragment+ViewPager实现如上效果。
public class MyAdapter extends BaseAdapter {
private Context context;
private List<Map<String,String>> list;
public MyAdapter(Context context, List<Map<String, String>> list) {
this.context = context;
this.list = list;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder vh;
if (convertView == null){
vh = new ViewHolder();
convertView = View.inflate(context,R.layout.list_item,null);
vh.length_tv = (TextView) convertView.findViewById(R.id.length_tv);
vh.address_tv = (TextView) convertView.findViewById(R.id.address_tv);
convertView.setTag(vh);
}else {
vh = (ViewHolder) convertView.getTag();
}
vh.length_tv.setText("时长:");
vh.length_tv.append(list.get(position).get("time"));
vh.address_tv.setText("地址:");
vh.address_tv.append(list.get(position).get("address"));
return convertView;
}
class ViewHolder{
TextView length_tv;
TextView address_tv;
}
}
public class MyFragmentAdapter extends FragmentPagerAdapter {
List<Fragment> list;
public MyFragmentAdapter(FragmentManager fm, List<Fragment> list) {
super(fm);
this.list = list;
}
@Override
public Fragment getItem(int position) {
return list.get(position);
}
@Override
public int getCount() {
return list.size();
}
}
public class MyStaggeredAdapter extends RecyclerView.Adapter<MyStaggeredAdapter.ViewHolder> {
private List<String> list;
private Context context;
public MyStaggeredAdapter(List<String> list, Context context) {
this.list = list;
this.context = context;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = View.inflate(context, R.layout.recycler_item, parent);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.tv.setText(list.get(position));
}
@Override
public int getItemCount() {
return list.size();
}
class ViewHolder extends RecyclerView.ViewHolder{
TextView tv;
public ViewHolder(View itemView) {
super(itemView);
tv = (TextView) itemView.findViewById(R.id.recycler_tv);
}
}
}
public class MyFragment extends Fragment implements AdapterView.OnItemClickListener {
private List<Map<String,String>> list;
public MyFragment(List<Map<String, String>> list) {
this.list = list;
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = LayoutInflater.from(getActivity()).inflate(R.layout.fragment_item, null);
ListView listView = (ListView) view.findViewById(R.id.listView);
listView.setAdapter(new MyAdapter(getActivity(),list));
listView.setOnItemClickListener(this);
return view;
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String address = list.get(position).get("address");
Intent intent = new Intent(getActivity(), SecondActivity.class);
intent.putExtra("address",address);
startActivity(intent);
}
}
public class MyFragment2 extends Fragment implements View.OnClickListener {
private ImageView img;
private VideoView videoView;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = LayoutInflater.from(getActivity()).inflate(R.layout.fragment2_item, null);
Button btn_photo = (Button) view.findViewById(R.id.btn_photo);
Button btn_video = (Button) view.findViewById(R.id.btn_video);
img = (ImageView) view.findViewById(R.id.img);
videoView = (VideoView) view.findViewById(R.id.video);
btn_photo.setOnClickListener(this);
btn_video.setOnClickListener(this);
return view;
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.btn_photo:
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent,1);
break;
case R.id.btn_video:
Intent intent2 = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
startActivityForResult(intent2,2);
break;
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK){
if (requestCode == 1){
Bundle bundle = data.getExtras();
Bitmap bitmap = (Bitmap) bundle.get("data");
img.setImageBitmap(bitmap);
}else if (requestCode == 2){
Uri uri = data.getData();
Cursor cursor = getContext().getContentResolver().query(uri, null, null, null, null);
String path = cursor.getString(cursor.getColumnIndex("data"));
videoView.setVideoURI(Uri.parse(path));
videoView.setMediaController(new MediaController(getActivity()));
videoView.start();
}
}
}
}
public class MyFragment3 extends Fragment implements View.OnClickListener {
VideoView videoView;
boolean isRunning = false;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = LayoutInflater.from(getActivity()).inflate(R.layout.fragment3_item, null);
Button btn_last = (Button) view.findViewById(R.id.btn_last);
Button btn_play = (Button) view.findViewById(R.id.btn_play);
Button btn_next = (Button) view.findViewById(R.id.btn_next);
videoView = (VideoView) view.findViewById(R.id.video_fragment3);
btn_last.setOnClickListener(this);
btn_play.setOnClickListener(this);
btn_next.setOnClickListener(this);
return view;
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_last:
if (videoView.isPlaying()) {
videoView.stopPlayback();
}
videoView.setVideoURI(Uri.parse("http://baobab.kaiyanapp.com/api/v1/playUrl?vid=12911&editionType=normal&source=qcloud"));
videoView.setMediaController(new MediaController(getActivity()));
videoView.start();
break;
case R.id.btn_play:
if (!isRunning && !videoView.isPlaying()){
isRunning = true;
videoView.setVideoURI(Uri.parse("http://baobab.kaiyanapp.com/api/v1/playUrl?vid=60096&editionType=default&source=qcloud"));
videoView.setMediaController(new MediaController(getActivity()));
videoView.start();
} else {
videoView.pause();
isRunning = false;
}
break;
case R.id.btn_next:
if (videoView.isPlaying()) {
videoView.stopPlayback();
}
videoView.setVideoURI(Uri.parse("http://baobab.kaiyanapp.com/api/v1/playUrl?vid=59402&editionType=default&source=qcloud"));
videoView.setMediaController(new MediaController(getActivity()));
videoView.start();
break;
}
}
}
public class MainActivity extends AppCompatActivity implements ViewPager.OnPageChangeListener {
private Toolbar toolBar;
private ViewPager viewPager;
private RadioButton info_rb;
private RadioButton link_rb;
private RadioButton dynamaic_rb;
private RadioGroup rg;
private LinearLayout activity_main;
private RadioButton[] rbArray;
private LocationManager manager;
private EditText gps_et;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SlidingMenu menu = new SlidingMenu(this);
menu.setMode(SlidingMenu.LEFT_RIGHT);
menu.setBehindOffset(200);
//全屏幕都可以滑动
//menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
menu.setMenu(R.layout.sliding_layout);
menu.setSecondaryMenu(R.layout.sliding2_layout);
menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);
initView();
}
private void initView() {
toolBar = (Toolbar) findViewById(R.id.toolBar);
viewPager = (ViewPager) findViewById(R.id.viewPager);
rg = (RadioGroup) findViewById(R.id.rg);
rbArray = new RadioButton[rg.getChildCount()];
for (int i = 0; i < rbArray.length; i++) {
rbArray[i] = (RadioButton) rg.getChildAt(i);
}
rbArray[0].setChecked(true);
activity_main = (LinearLayout) findViewById(R.id.activity_main);
addViewPager();
setRadioGroup();
addGps();
addStagged();
}
private void addStagged() {
View view = LayoutInflater.from(this).inflate(R.layout.sliding2_layout, null);
RecyclerView recycler = (RecyclerView) view.findViewById(R.id.recycler);
StaggeredGridLayoutManager manager = new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL);
recycler.setLayoutManager(manager);
List<String> list = new ArrayList<>();
for (int i = 0; i < 20 ; i++) {
list.add("瀑布咯"+i);
}
MyStaggeredAdapter staggeredAdapter = new MyStaggeredAdapter(list, this);
recycler.setAdapter(staggeredAdapter);
}
private void addGps() {
View view = LayoutInflater.from(this).inflate(R.layout.sliding_layout, null);
gps_et = (EditText) view.findViewById(R.id.gps_et);
manager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
Toast.makeText(this, "请开启GPS", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivityForResult(intent, 1);
}
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return;
}
manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 1, listener);
}
LocationListener listener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
updateData(location);
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return;
}
Location location = manager.getLastKnownLocation(provider);
updateData(location);
}
@Override
public void onProviderDisabled(String provider) {
updateData(null);
}
};
private void updateData(Location location) {
gps_et.setText("纬度:");
gps_et.append(String.valueOf(location.getLongitude()));
gps_et.append("\n经度:");
gps_et.append(String.valueOf(location.getLatitude()));
gps_et.append("\n海拔:");
gps_et.append(String.valueOf(location.getAltitude()));
}
private void setRadioGroup() {
viewPager.setOnPageChangeListener(this);
rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
for (int i=0;i<rg.getChildCount();i++){
if(checkedId==rbArray[i].getId()){
viewPager.setCurrentItem(i);//设置选中radioButton对应的页面选中
}
}
}
});
}
private void addViewPager() {
List<Fragment> list = new ArrayList<>();
MyFragment fragment = new MyFragment(getFragmentList());
MyFragment2 fragment2 = new MyFragment2();
MyFragment3 fragment3 = new MyFragment3();
list.add(fragment);
list.add(fragment2);
list.add(fragment3);
MyFragmentAdapter fragmentAdapter = new MyFragmentAdapter(getSupportFragmentManager(), list);
viewPager.setAdapter(fragmentAdapter);
}
private List<Map<String,String>> getFragmentList(){
List<Map<String,String>> list = new ArrayList<>();
MySQLiteOpenHelper helper = new MySQLiteOpenHelper(this);
SQLiteDatabase database = helper.getWritableDatabase();
Cursor cursor = database.query("test", null, null, null, null, null, null);
MediaPlayer player = new MediaPlayer();
if (cursor != null) {
while (cursor.moveToNext()) {
Map<String, String> map = new HashMap<>();
String address = cursor.getString(1);
try {
player.setDataSource(address+R.raw.aaaa);
player.prepare();
} catch (IOException e) {
e.printStackTrace();
}
int duration = player.getDuration();
map.put("time", String.valueOf(duration));
map.put("address", String.valueOf(address));
list.add(map);
}
}
return list;
}
//选项菜单
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.options_menu,menu);
return true;
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
rbArray[position].isChecked();
}
@Override
public void onPageScrollStateChanged(int state) {
}
}
public class MySQLiteOpenHelper extends SQLiteOpenHelper {
private static final String DBName = "myDB.db";
private static final int version = 1;
public MySQLiteOpenHelper(Context context) {
super(context, DBName, null, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table if not exists test(_id integer primary key autoincrement," +
"address text)");
addMusic(db);
}
private void addMusic(SQLiteDatabase db) {
for (int i = 0; i < 10; i++) {
ContentValues values = new ContentValues();
values.put("address","android:resource://"+MainActivity.class.getPackage().getName()+"/");
db.insert("test", null, values);
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
Button button = (Button) findViewById(R.id.back);
SurfaceView surfaceView = (SurfaceView) findViewById(R.id.hello);
SurfaceHolder holder = surfaceView.getHolder();
Intent intent = getIntent();
String address = intent.getStringExtra("address");
MediaPlayer mediaPlayer = new MediaPlayer();
try {
mediaPlayer.setDataSource("android:resource://"+getPackageName() +"/"+ R.raw.aaaa);
mediaPlayer.prepare();
} catch (IOException e) {
e.printStackTrace();
}
mediaPlayer.start();
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}
}