0

我有一個自定義ListView,每個項目打開本地HTML文件(WebView)。 當我點擊ListView項目到WebView時,我很難爲轉換添加動畫。我嘗試使用ActivityOptions.makeSceneTransitionAnimation()方法在startActivity()方法如下: -ListView項目擴展到WebViews - Transition Animation

MainActivity.java

public class MainActivity extends AppCompatActivity { 

ListView listView; 

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

    listView = (ListView) findViewById(R.id.list); 


    String[] values = new String[] { "LINK 1", 
      "LINK 2", "LINK 3" 
    }; 

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
      android.R.layout.simple_list_item_1, android.R.id.text1, values) { 
     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      View view = super.getView(position, convertView, parent); 
      if (position==0||position==1||position==2) { 
       view.setBackgroundColor(Color.parseColor("#BBDEFB")); 
      } else { 
       view.setBackgroundColor(Color.parseColor("#006064")); 
      } 
      return view; 
     } 
    }; 

    listView.setAdapter(adapter); 
    //final HashMap<String, Integer> hashMap = new HashMap<String, Integer>(); 



    **listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
           int position, long id) { 
      // TODO Auto-generated method stub 
      if (position == 0) { 
       Intent myIntent = new Intent(getApplicationContext(), 
         WebViewActivity.class); 
       myIntent.putExtra("key", 0); 
       startActivity(myIntent, ActivityOptions.makeSceneTransitionAnimation(this).toBundle()); 
      }else if (position == 1) { 
       Intent myIntent = new Intent(getApplicationContext(), 
         WebViewActivity.class); 
       myIntent.putExtra("key", 1); 
       startActivity(myIntent, ActivityOptions.makeSceneTransitionAnimation(this).toBundle() ); 
      }else if (position == 2) { 
       Intent myIntent = new Intent(getApplicationContext(), 
         WebViewActivity.class); 
       myIntent.putExtra("key", 2); 
       startActivity(myIntent); 
      }** 



     } 

    }); 

,但我得到了以下錯誤:

Error:(69, 60) error: no suitable method found for makeSceneTransitionAnimation(<anonymous OnItemClickListener>) 
method ActivityOptions.makeSceneTransitionAnimation(Activity,View,String) is not applicable 
(actual and formal argument lists differ in length) 
method ActivityOptions.makeSceneTransitionAnimation(Activity,Pair<View,String>...) is not applicable 
(actual argument <anonymous OnItemClickListener> cannot be converted to Activity by method invocation conversion) 

我全碼:

WebViewActivity.java

public class WebViewActivity extends AppCompatActivity { 
WebView webView; 

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

    webView = (WebView) findViewById(R.id.webView1); 
    //webView.setWebViewClient(new myWebClient()); 
    webView.getSettings().setJavaScriptEnabled(true); 
    int pos = getIntent().getIntExtra("key", 0); 
    if (pos == 0) { 
     webView.loadUrl("file:///android_asset/index.html"); 
    } else if (pos == 1) { 
     webView.loadUrl("file:///android_asset/index2.html"); 
    } else if (pos == 2) { 
     webView.loadUrl("file:///android_asset/index3.html"); 
    } 

} 


} 

activity_main.xml中

`

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    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" 
    tools:context="com.example.a405146.listview.MainActivity"> 

    <ListView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/list" 
     android:layout_centerHorizontal="true" 
     android:layout_alignParentTop="true" 
     android:background="?android:attr/selectableItemBackground"/> 
</RelativeLayout> 

`

activity_web_view.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
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" 
tools:context="com.example.a405146.listview.WebViewActivity"> 

<WebView 
    android:id="@+id/webView1" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    /> 

</RelativeLayout> 

請幫我理解我出錯的地方以及如何正確實施過渡。

回答

0

您需要爲listView中的所有視圖提供唯一的transitionName。您可以在調用getView時在適配器中執行該操作,調用setTransitionName並設置唯一的名稱,例如某個字符串與每個項目唯一的當前位置的組合。寫這樣的事情getView方法

ViewCompat.setTransitionName(convertView, "list_item_"+position); 

內,在接下來的活動中,讓你的WebView獨特的transitionName也一樣,「sharedWebView」。現在,當您開始下一個活動時,爲該視圖創建一個Pair對象,並在下一個活動中創建該視圖的名稱。事情是這樣的

Pair<View, String> pair = Pair.create(view, "sharedWebView"); 

,並通過它,當你開始的活動,也是要傳遞到這裏的內部類的引用,但你必須通過活動的參考。像這樣的東西

startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(MainActivity.this, pair).toBundle()); 
+0

謝謝,我知道我應該從這個答案改變的想法! –