我正在尝试显示一个gif,它在模拟器中效果很好,但在我的真实设备上,它非常迟钝。我有Samsung Galaxy A3 - 2017
。我尝试了许多库,例如Glide library
,Ion library
,felipecsl.gifimageview library
,但没有任何效果。我试图从URL显示gif,甚至从drawable,raw和assets文件夹中显示,但没有。有什么想法吗?
目前我的项目中有这个:
布局:
<com.felipecsl.gifimageview.library.GifImageView
android:id="@+id/gifImageView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/bottomNavBar"/>
MainActivity:
public class MainActivity extends AppCompatActivity {
GifImageView gifImageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gifImageView = (GifImageView) findViewById(R.id.gifImageView);
BottomNavigationView bottomNavigationView = (BottomNavigationView) findViewById(R.id.bottomNavBar);
bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId())
{
case R.id.back:
Toast.makeText(MainActivity.this, "Previous", Toast.LENGTH_SHORT).show();
break;
case R.id.start:
//Toast.makeText(MainActivity.this, "Start Gif", Toast.LENGTH_SHORT).show();
new RetriveByteArray().execute("http://gifdanceparty.giphy.com/assets/dancers/smooch.gif");
gifImageView.startAnimation();
break;
case R.id.stop:
//Toast.makeText(MainActivity.this, "Stop Gif", Toast.LENGTH_SHORT).show();
gifImageView.stopAnimation();
break;
case R.id.share:
Toast.makeText(MainActivity.this, "Share", Toast.LENGTH_SHORT).show();
break;
case R.id.next:
Toast.makeText(MainActivity.this, "Next", Toast.LENGTH_SHORT).show();
break;
}
return true;
}
});
}
RetriveByteArray:
private class RetriveByteArray extends AsyncTask<String, Void, byte[]>
{
@Override
protected byte[] doInBackground(String... strings) {
try {
URL url = new URL(strings[0]);
HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection();
if (urlConnection.getResponseCode() == 200)
{
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
int nRead;
byte[] data = new byte[10240];
while ((nRead = in.read(data, 0, data.length)) != -1)
{
buffer.write(data, 0, nRead);
}
buffer.flush();
return buffer.toByteArray();
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(byte[] bytes) {
super.onPostExecute(bytes);
gifImageView.setBytes(bytes);
}
}
修改编辑
任何想知道我如何解决它的人(感谢TGMCians回答):
添加依赖项:
`compile 'com.facebook.fresco:fresco:1.4.0'
// For animated GIF support
compile 'com.facebook.fresco:animated-gif:1.4.0'`
布局:
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/my_image_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
/>
MainActivity:
public class MainActivity extends AppCompatActivity {
SimpleDraweeView mSimpleDraweeView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Fresco.initialize(this);
setContentView(R.layout.activity_main);
mSimpleDraweeView = (SimpleDraweeView) findViewById(R.id.my_image_view);
DraweeController controller = Fresco.newDraweeControllerBuilder()
.setUri("https://media4.giphy.com/avatars/100soft/WahNEDdlGjRZ.gif")
.setAutoPlayAnimations(true)
.build();
mSimpleDraweeView.setController(controller);
答案 0 :(得分:0)
任何想知道我是如何修复它的人(感谢 TGMCians 的回答)
添加依赖:
compile 'com.facebook.fresco:fresco:1.4.0'
// For animated GIF support
compile 'com.facebook.fresco:animated-gif:1.4.0'
布局:
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/my_image_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
/>
主要活动:
public class MainActivity extends AppCompatActivity {
SimpleDraweeView mSimpleDraweeView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Fresco.initialize(this);
setContentView(R.layout.activity_main);
mSimpleDraweeView = (SimpleDraweeView) findViewById(R.id.my_image_view);
DraweeController controller = Fresco.newDraweeControllerBuilder()
.setUri("https://media4.giphy.com/avatars/100soft/WahNEDdlGjRZ.gif")
.setAutoPlayAnimations(true)
.build();
mSimpleDraweeView.setController(controller);