몇 시간 동안 솔루션을 찾고있었습니다. listview
에 대한 사용자 정의 baseAdapter
을 만들었습니다. 이미지가 제대로 작동합니다. imageView
일한 후에는 VideoView
도 괜찮을 것이라고 생각했습니다. 그렇다면, 나는 그것 대신에 TextureViev
을 사용해야한다는 것을 알았지 만, 그 논리는 분명했지만 결국에는 웹상에 아무런 해결책이없는 약간의 오류가있었습니다.Listview에서 비디오 재생
나는 Glide
을 사용해 보았습니다. 효과가 없었고 다시 여기에 왔습니다.
mediaplayer 준비 중에 이러한 오류가 발생합니다.
E/ExtMediaPlayer-JNI : JNIMediaPlayerFactory : env-> IsInstanceOf는
E/MediaPlayer를-JNI 실패 bIsQCMediaPlayerPresent 0 매체 제조
;
W/MediaPlayer를 : 정보/경고 (3, 0)
때 시도 mediaplayer
시작시 [32 : 12-19 19 11.967 378 : 31,124 전자 /] avi 모드가 아닙니다.
계속 진행하려면 모든 영감이 필요합니다. 감사합니다.
mediaplayer
및 textureview
방법을 구현하여 MainActivity
클래스의 내부 클래스에 baseAdapter
을 정의했습니다.
public class postAdapter extends BaseAdapter implements TextureView.SurfaceTextureListener, MediaPlayer.OnBufferingUpdateListener, MediaPlayer.OnCompletionListener, MediaPlayer.OnPreparedListener, MediaPlayer.OnVideoSizeChangedListener {
ArrayList<Posts> posts;
public postAdapter(ArrayList<Posts> postsToList)
{
posts=postsToList;
}
MediaPlayer mMediaPlayer;
TextureView textureView;
VideoView animatedView;
@Override
public int getCount() {
// Log.d(TAG, "getCount: "+posts.size());
return posts.size();
}
public void addRangeToTop(ArrayList<Posts> newposts)
{
for (int i=0;i<newposts.size();i++)
{
posts.add(i,newposts.get(i));
}
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View child = getLayoutInflater().inflate(R.layout.animatedpost, null);
TextView titleView = (TextView) child.findViewById(R.id.titleView);
ImageView imageView = (ImageView) child.findViewById(R.id.capsView);
animatedView=(VideoView) child.findViewById(R.id.animatedView);
textureView=(TextureView)child.findViewById(R.id.textureView);
TextView voteView = (TextView) child.findViewById(R.id.voteView);
Button button=(Button) child.findViewById(R.id.button2);
textureView.setSurfaceTextureListener(this);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
/* ArrayList<Posts> newp=new ArrayList<Posts>();
for (int i=10;i<15;i++)
{
Posts post=new Posts();
post.setPostTitle(i+"dsf");
post.setPostVote(i+"sdfsd");
newp.add(post);
}
int index = lv.getFirstVisiblePosition()+newp.size() ;
View v2 = lv.getChildAt(0);
int top = (v2 == null) ? 0 : v2.getTop();
addRangeToTop(newp);
notifyDataSetChanged();
lv.setSelectionFromTop(index, top);*/
/* Uri uri = Uri.parse("http://somepath"); // missing 'http://' will cause crashed
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);*/
}
});
titleView.setText(posts.get(position).getPostTitle());
voteView.setText(posts.get(position).getPostVote());
// imageView.setImageResource(R.drawable.df);
return child;
}
@Override
public void onBufferingUpdate(MediaPlayer mp, int percent) {
}
@Override
public void onCompletion(MediaPlayer mp) {
}
@Override
public void onPrepared(MediaPlayer mp) {
Log.d(TAG, "onPrepared: ");
mp.start();
}
@Override
public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
}
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
mMediaPlayer=new MediaPlayer();
Surface s = new Surface(surface);
try {
mMediaPlayer.setDataSource("http://somefunnyvideopath.mp4");
mMediaPlayer.setSurface(s);
mMediaPlayer.setOnBufferingUpdateListener(this);
mMediaPlayer.setOnCompletionListener(this);
mMediaPlayer.setOnPreparedListener(this);
mMediaPlayer. setOnVideoSizeChangedListener(this);
mMediaPlayer.prepareAsync();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
}
@Override
public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
return false;
}
@Override
public void onSurfaceTextureUpdated(SurfaceTexture surface) {
}
}
감사합니다.하지만이 방법은 효과가 없습니다. 또한 나는 자원에서 동일한 및 다른 mp4를 시도하고 작동하지 않았다. 아직도 무엇을 해야할지 모르겠다. –